1. 直接插入排序,这没什么技术含量,每一次都在表里找到元素应该插入的位置然后把整个表的后续元素后移。这真没什么技术含量。
2. 折半插入排序,就是用折半查找找到插入的位置,然后后移。
3. 2路插入排序,这排序算法就是利用循环表,有一个循环表,刚开始表头和表尾都在表的下标0的位置,第一个元素就直接插下标0,表头就挪动到缓冲的最后一个下标(按照循环的概念来说,就是被插入元素的前一个位置),表尾挪到下标1,也就是第一个元素的下一个位置,这样,第一个元素就把整个表分成了两个,前半和后半,被第一个元素小的元素插入到前半表,比第一个元素大的插入到后半表。这样,如果插入的时候需要移动元素,也只需要平均移动半张表,例如
13,1,2,15,14
刚开始表里是13,然后插入1,变成,1,13,然后插入2,这时候2肯定插在1和13之间,这样只需要把1往前挪动,而不是13和后续的表往后挪动,变成1,2,13。
同样插15,15插13的后边,变成1,2,13,15。这时候插14,14显然插13和15之间,这时候也是把15向后挪动,而不是1,2,13往前挪动,插入后变成1,2,13,14,15。
每次挪动的次数很少。
4.起泡,什么好说的,最简单的快速排序办法,第一次通过两两交换把最大的换到表的末尾,然后再继续搞第二大,第三大,最后是最小的。
5. 快速排序,这是对起泡的一种改进。
现在有一个轴,最开始在下标0,然后两指针,一个指表头,一个指表尾。
从表尾开始往前找一个比轴小的,由于轴现在在下标0,你找到这个元素又比轴小,甭管它是不是最小的,总之这个元素应该被换到前面去,轴应该被换到后面来,这是做第一次交换。现在再从表头开始找比轴大的元素,同理,大的元素应该排轴前面,于是再作交换。在两次交换下,一个小的被换到前面去了,一个大的被换到后面来了。循环持续这样做,直到表头和表尾指针重合。
轴现在改变了位置,所有比轴小的元素都在轴的前面,所有比轴大的元素现在都在轴的后面,轴现在把表分成了两个部分,前半和后半,继续对前半和后半排序,直到整个表有序(如果轴分隔的两个子表分别只有一个元素,那么这个子表就有序)。
6.简单选择排序,也没什么技术含量,先找一个最小的和下标0换位置,然后再从剩下的表里找一个第二小的跟下标1换位置。