几种排序算法的描述总结

算法总结

概述

包含冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序的描述概括

冒泡排序

两个两个进行比较和调换位置,最坏需要n轮。优势就是可以在序列已经有序的时候,可以提前停止(这种改进后的算法称为短冒泡),时间复杂度O(n2n^2)。
几种排序算法的描述总结

选择排序

每次遍历选择最大值,依次放在合适的位置上。时间复杂度仍然是O(n2n^2),但是因为减少了交换次数,通常是比冒泡排序更快的。
几种排序算法的描述总结

插入排序

在列表的较低端维护一个有序的子列表,一次将元素插入到列表中合适的位置。(具体实现:将待排序的元素拿出来,然后维护的列表元素依次往后挪,知道待插入的元素找到合适位置,插入)
几种排序算法的描述总结

希尔排序

在最终的插入排序之前增加预处理:以i为步长的多个序列内先进行插入排序,然后再将这些序列合并在一起,进行插入排序。时间复杂度在O(nn)~O(n2n^2),这取决于步长的选择。
几种排序算法的描述总结

归并排序

采用分治的策略,将一个序列最终划分为由1个元素组成的多个序列,然后再合并起来(在合并的过程中进行排序),时间复杂度O(nlognnlogn),缺点就是需要占用空间来保存序列片段,以空间换时间了,可能会溢出。
几种排序算法的描述总结

快速排序

思想:采用一个基准值,大于这个基准值的就放在前面,小于它的就放在它后面。然后再对前面和后面的序列分别再次使用快速排序……(分治)。优点:不需要额外的空间。时间复杂度理想的时候:O(nlognnlogn),最差的情况:O(n2n^2),发生在分割点偏向一端。通常采用三数取中的方法来试图避免,即在选择基数的时候,分别考虑列表的头元素、中间元素、尾元素,选取中间值作为基准值。
实现:通过一个leftmark指针,和rightmark指针,leftmark指针从前往后移动,rightmark从右往前移动,如果排序的结果希望是从小到大,则要保证最终基准值前面的元素都小于它、后面的比它大,那么leftmark遇到比基准值大的值就停下来,rightmark遇到比基准值小的也停下来指向它,然后这两个值交换位置,就实现了基准值前面的元素都比他小、后面的都比他大的目的。直到这两个指针相邻为止,然后将基准值的元素放到这里(可以和rightmark的元素互换即可,让最后一步的时候rightmark已经<leftmark了),然后再将前半部分和后半部分分别快速排序操作。
几种排序算法的描述总结