【数据结构】八大排序的总结(干货)

八大排序——按方式划分

    • 一、插入排序
      • 1、直接插入排序
      • 2、希尔排序
    • 二、选择排序
      • 3、简单选择排序
      • 4、堆排序
    • 三、交换排序
      • 5、冒泡排序
      • 6、快速排序
    • 四、归并排序
      • 7、归并排序
    • 五、基数排序
      • 8、(基数排序)桶排序
    • 六、八大排序的效率

一、插入排序

1、直接插入排序

====》详讲简单插入排序及完整代码

将数据分为已排序部分和未排序部分,将第二个数据存放在tmp中,将它与它前面的每个数字进行比较,找到合适位置并插入已排序部分。
【数据结构】八大排序的总结(干货)_第1张图片

2、希尔排序

====》详讲希尔排序及完整代码

按照增量将数据分为多个小组,先在组内进行排序,当所有组排好后,重新设增量进行排序,直到最后增量为1,整个数据有序。也就是使组内有序从而达到整体趋于有序。
(增量设为质数)
在这里插入图片描述
因为希尔排序是基于直接插入排序而言的,而进行小组内排序的数组互不影响,我们可以从开始在进行第二个数据排序时,把每个小组的第二个数据都进行排序,依次进行。这样能简化操作。

二、选择排序

3、简单选择排序

====》详讲简单选择排序及完整代码

划分已排序部分和待排序部分,不过这次的待排序部分是从0号位置开始。在每趟排序开始时 i 和 min 都存放待排序部分的首位,j 指向i的下一位,让 j++ 的每一位 与min进行比较,在排序的过程中,min中存放的都是最小的数据,最后将min放在i的位置,i++,继续进行上述操作。
【数据结构】八大排序的总结(干货)_第2张图片

4、堆排序

====》详讲堆排序及完整代码

一般用大顶堆(堆顶存放的为最大元素)
先将数据创建为大顶堆,大顶堆是一个降序的数据,我们要得到升序的数据,就再将当前堆顶元素和末尾元素进行交换,将交换后末尾元素- -,将堆顶元素输出,在进行重建堆,一直保证堆顶是最大元素,依次进行交换、重建堆这个过程。

三、交换排序

5、冒泡排序

====》详讲冒泡排序、优化及完整代码

将大数逐渐后移,小数逐渐前移。
用 j 标记首位元素,一直让j++,比较 j 和 j+1 的大小,将小的往前移,然后用 i 标记首位元素,每排序一趟让 i ++,以此来控制每趟排序的已排序个数,已排序好的数据在最后,j 不用再进行比较,一直循环上述操作。
【数据结构】八大排序的总结(干货)_第3张图片

6、快速排序

====》详讲快速排序、优化及完整代码

在数据中找一个基准点用key来标识,先在这一组内用最后一个数据与基准点数据进行比较,将比基准点小的数放在前面有空位的地方,如果没有数据移动,就一直 - -,如果有移动数据,那又从基准点后一位开始比较,将比基准点大的数放在后面有空位的位置,如果没有数据移动,就一直 ++。遍历结束后就将数据分成了以基准点为中心的两部分,然后循环进行上述操作。

四、归并排序

7、归并排序

====》详讲归并排序及完整代码

将数据以 (right + left)/2 的规则进行划分,right为组内首位元素,left为组内末位元素。直到划分为每个数据为一个小组。然后以上一次划分为基准有进行合并,也就是将那些数据划分的就将那些数据合并,合并时将两个小组内元素进行排序,形成组内有序在进行下一次合并。

五、基数排序

8、(基数排序)桶排序

====》详讲桶排序及完整代码

依次按个位、十位、百位等将数据放在相应的桶中,然后按顺序依次取出。

六、八大排序的效率

1、总结
【数据结构】八大排序的总结(干货)_第4张图片

2、算法复杂度与初始状态无关
选择排序(直接选择排序、堆排序)
归并排序
基数排序
3、总排序趟数与初始状态无关
除了快速排序,优化过后的冒泡排序以外,其他的排序算法都满足

你可能感兴趣的:(数据结构,八大排序的时间复杂度,排序总结)