排序算法

直接插入排序:

每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。最好情况下,排序前对象已经按照要求的有序。比较次数n−1 ; 移动次数0。则对应的时间复杂度为O(n)。最坏情况下,排序前对象为要求的顺序的反序。第i趟时第i个对象必须与前面i个对象都做排序码比较,并且每做1次比较就要做1次数据移动,移动次数和比较次数为n2/2,时间复杂度为O(n2)。所以和初始序列有关。

冒泡排序:

对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序。数据正序,只需要走一趟即可完成排序。所需的比较次数n-1和记录移动次数均达到最小值0,所以,冒泡排序最好的时间复杂度为O(n)。如果数据是反序的,则需要进行n-1趟排序。每趟排序要进行n-i次比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值,最坏的时间复杂度为O(n2)。所以和初始序列有关。

快速排序:

选择一个元素,将比它小的放在它的左边,比它大的放右边,递归完所有未完成排序的数组即可完成最后的目标。当分区选取的基准元素为待排序元素中的最大或最小值时,为最坏的情况O(n2),当分区选取的基准元素为待排序元素中的"中值",为最好的情况,时间复杂度为O(nlog2n)。

直接选择排序:

每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。因为选出待排序数组的最大值或最小值需要扫描全部的元素所以和元素初始序列无关。

原文地址:https://www.cnblogs.com/claudia529/p/11105826.html