[TOC]
排序算法
冒泡排序
从一端开始将相邻的两个比较,大的往后移动,这样一轮比下来,最大数冒泡到最后了,对剩下的序类按此交换
选择排序
和冒泡排序类似,都是一轮排序后把最大的数放到最后。不同的是冒泡是没相邻两个比较,选择排序首先要遍历该数组,把最小的数字和第一个位置的数字交换,这样就把最小的数字放到了最左边。对剩下的序类也按次交换。
插入排序
和打扑克牌一样的道理,拿到一张牌找到一个合适的位置插入。
如序类5,3,8,6,4。第一张牌作为基准,然后第二张牌3要插入到5后面,那么就把从5开始后移一位,放入3,变成了3,5,8,6,4.然后拿到第三章牌8,它比前面排序好的数都大,不动。拿到第四张牌6的时候把它插到8前面。
快速排序
选择一个基准,序类中每个数都和这个基准比较,小的放在left数组,大的放在right数组。然后分别对基准左右两边的子序类进行相似的比较,依次递归。
常规的快排:https://blog.csdn.net/morewindows/article/details/6684558
对挖坑填数进行总结
1.i =L; j = R; 将基准数挖出形成第一个坑a[i]。
2.j–由后向前找比它小的数,找到后挖出此数填前一个坑a[i]中。
3.i++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[j]中。
4.再重复执行2,3二步,直到i==j,将基准数填入a[i]中。
一次快排下来,最初选择的基数两边分别是比它小和大的
判断两个链表是否相交并找出交点
如果两个链表相交那么尾部一定相等,假设第一个链表长度时L1,第二个长L2,交点不可能在长的L2-L1这段差值之间,所以先让较长的L2走完L2-L1这一段,然后两个链表同时走,判断什么时候相等