数据结构中的排序算法
当待排序序列基本有序时优先选择简单排序,快速排序平均次数少于堆排序
1 插入排序
1) 直接插入排序
第一次将位置0和位置1进行比较,小的放前。
第二次将位置2上的数字,插入到位置0和位置1中。
…
第k次将位置k上的数字,插入到第k-1次已经完成的序列中。
5 2 6 0 3 9 1 7 4 8
一趟 2 5 6 0 3 9 1 7 4 8
二趟 2 5 6 0 3 9 1 7 4 8
三趟 0 2 5 6 3 9 1 7 4 8
四趟 0 2 3 5 6 9 1 7 4 8
五趟 0 2 3 5 6 9 1 7 4 8
六趟 0 1 2 3 5 6 9 7 4 8
七趟 0 1 2 3 5 6 7 9 4 8
八趟 0 1 2 3 4 5 6 7 9 8
九趟 0 1 2 3 4 5 6 7 8 9
2)希尔排序
先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。
49 38 65 97 76 13 27 49 55 04
第一趟增量5 13 27 49 55 04 49 38 65 97 76
第二趟增量3 13 04 49 38 27 49 55 65 97 76
第三趟增量1 04 13 27 38 49 49 55 65 76 97
2 选择排序
选择排序每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
每次都是遍历一遍剩下要排序的部分,找出其最大值或最小值。关键码比较次数与记录地初始排列无关
1)直接选择排序
第一次取区间[0,N],选择该区间最小的数和位置0的数进行交换;
第二次取区间[1,N],选择该区间最小的数和位置1的数进行交换;
第三次取区间[2,N],选择该区间最小的数和位置2的数进行交换;
依次往下,可以得到排序,这就是选择排序。
ex
8 5 9 3 7
遍历1号 3 5 9 8 7
遍历2号 3 5 9 8 7
遍历3号 3 5 7 8 9
遍历4号 3 5 7 8 9
2)堆排序
3 交换排序
1)冒泡排序
第一次取区间[0,N],通过比较第i个和第i+1个的大小,如果第i+1个数字小于第i个,则互换。
第二次取区间[0,N-1],通过比较第i个和第i+1个的大小,如果第i+1个数字小于第i个,则互换。
2)快速排序
1从序列当中选择一个基准数(pivot)
2将序列当中的所有数依次遍历,比基准数大的位于其右侧,比基准数小的位于其左侧
重复步骤1.2,直到所有子集当中只有一个元素为止。
4 归并排序
原文地址:https://www.cnblogs.com/52circle/p/9176290.html