排序算法的总结与感悟

1、快速排序

      思路:先选择一个哨兵元素,然后后往前遍历,遇到比哨兵小的元素停止,从前往后进行遍历,
     遇到比哨兵元素大的元素停止,交换两个元素,继续,直到前后相遇,此时交换相遇点的元素
     和哨兵元素,一趟排序下来,可以确保哨兵元素左边的元素比哨兵小,右边的元素比哨兵大(升序排序);
     然后分区间再继续上述过程
     注意:通常选取左边界作为哨兵元素,此时,必定先进行从后往前的移动,否则不对称缺项会出错
     时间复杂度:平均O(nlogn) 最差O(n^2)
      空间复杂度:O(logn)交换时需要一个额外的空间,一共交换logn次

2、直接插入排序

     思路:由第二个元素开始,从前向后遍历,如若当前元素比前一个元素小,则将
     当前元素设为哨兵元素,保存当前元素,从当前位置向前扫描,寻找哨兵元素应该插入的位置,
     前面的元素依次后移,找到直接插入。然后继续上述过程
     时间复杂度:O(n^2)
     空间复杂度:O(1)
    
3、希尔排序

     思路:以一定间隔对数组进行分组,在组上进行直接插入排序,使之有序,之后缩小间隔,
     重复上述过程
     时间复杂度:O(n^1.5)
     空间复杂度:O(1)
   
4、冒泡排序

      思路:每次内循环使相邻元素有序,单次循环后最大值沉底(升序时)
      之后缩短内循环范围,继续上述操作,但是 有个问题,太冗杂
      时间复杂度:O(N^2)
      空间复杂度:O(1)

5、个人感悟
     
      各种排序都比较易懂,最大的收获,是通过希尔排序和其他排序的比较让我懂得了,优化一个算法,比写出一个算法要难得多得多。
    

你可能感兴趣的:(排序算法的总结与感悟)