八大排序算法

1.直接插入排序

(1)算法思想

将一个记录插入到已排序好的有序表中,从而得到一个新的记录数增1的有序表。其实就是先将序列的第一个记录看成是一个有序的子序列,然后从第2个记录逐条进行插入,直至整个序列有序为止。实现这个思想的重点是设立哨兵,可以起到临时存储和判断数组边界的作用。

(2)算法图解

(3)算法实现

(4)算法特点

优点是稳定,效率高;缺点是比较次数不一定,特别是当数据量庞大的时候,比较的次数越少,插入点后的数据移动越多。

部分转载:八大排序算法分析与总结_frankliu624的博客-CSDN博客

2.冒泡排序

(1)算法思想

在需要排序的一组数中,选出最大(最小)的一个数,然后立即和比它小(大)而且排位比它要靠后的数交换。

(2)算法图解

(3)算法实现

(4)算法特点

优点:比较简单,空间复杂度较低,稳定;缺点:时间复杂度高,效率低。

部分转载:面试版-八大排序算法_排序算法面试_wsqyouth的博客-CSDN博客

3.直接选择排序

(1)算法思想

在需要排序的一组数中,选出最小(最大)的一个数与第1个位置的数交换,然后在剩下的数当中再找最小(最大)的与第2个位置的数交换,依此类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。

(2)算法图解

(3)算法实现

(4)算法特点

优点:数据移动的次数已知,为(n-1)次;缺点:比较的次数较多,不稳定,效率低。

部分转载:理论基础 —— 排序 —— 直接选择排序_Alex_McAvoy的博客-CSDN博客

4.快速排序

(1)算法思想

选择一个基准元素,将比基准元素小的元素放在其前面,比基准元素大的元素放在其后面,然后再将小于基准值元素的子数列和大于基准元素的子数列按原来的方法排序,值到整个序列有序。重点是利用递归方法分而治之。

(2)算法图解

(3)算法实现

(4)算法特点

优点:数据移动次数较少,效率高;缺点:不稳定。

部分转载:百度安全验证

5.堆排序

(1)算法思想

二叉堆是完全二叉树或近似完全二叉树。二叉树满足两个特性:(1)父结点的键值总是大于或者等于(小于或者等于)任何一个子节点的键值;(2)每个结点的左子树和右子树都是一个二叉堆。大根堆和小根堆的定义:当父结点的键值总是大于或者等于任何一个子节点的键值时为大根堆。当父结点的键值总是小于或等于任何一个子节点的键值时为小根堆。

用大根堆排序的基本思想是①先将初始数组组建成一个大根堆,此对为初始的无序区;②再将最大的元素和无序区的最后一个记录交换,由此得到新的无序区和有序区,且满足<=的值;③由于交换后的新的根可能违反堆性质,故将当前无序区调整为堆;④然后再次将其中最大的元素和该区间的最后一个记录交换,由此得到新的无序区和有序区,且仍满足关系的值<=的值,同样要将其调整为堆;⑤一直重复②③④步,直到无序区只有一个元素为止

(2)算法图解

①构建堆

②堆排序

(3)算法实现

(4)算法特点

优点:效率高;缺点:不稳定

部分转载:(1)超详细的八大排序算法的各项比较以及各自的特点_排序算法比较_m0_37962600的博客-CSDN博客

                  (2)https://www.cnblogs.com/XYQ-208910/p/6917708.html

6.归并排序

(1)算法思想

首先将初始序列的n个记录看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到n/2个长度为2的有序子序列,在此基础上,再对长度为2的有序子序列进行两两归并,得到若干个长度为4的有序子序列,以此类推,直到得到一个长度为n的有序序列为止。

(2)算法图解

(3)算法实现

(4)算法特点

优点:稳定,效率高;缺点:对数据的有序性不敏感,若数据结点数据量大,那将不合适。但可改造成索引操作解决此问题。

部分转载:(1)超详细的八大排序算法的各项比较以及各自的特点_排序算法比较_m0_37962600的博客-CSDN博客

                  (2)https://www.cnblogs.com/ktao/p/7802037.html

7.基数排序

(1)算法思想

基数指的是需要排序的数列中每个数的个位、十位、百位上的数字。从左往右根据基数的值设立分别收集0、1、2、3、4、5、6、7、8、9的桶共十个。排序时先按照最低位(个位)子关键字的值进行排序,即按子关键字的不同值将个数据元素分配到对应的桶中,然后按照从左往右的顺序将数据元素再提取出来,此时得到的序列已按最低位子关键值有序排列。然后再继续按照此方法比较十位、百位、直至比较完最高位为止,最后得出的序列就是一个有序序列。

(2)算法图解

(3)算法实现

(4)算法特点

优点:稳定,效率高

部分转载:【图解数据结构】 一组动画彻底理解基数排序 - 简书

8.希尔排序

(1)算法思想

先将整个待排序元素序列分割成若干子序列(由相隔某个 “增量“ 的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行以此直接插入排序(因为直接插入排序在元素基本有序的情况下,效率很高)。

(2)算法图解

è¿éåå¾çæè¿°è¿éåå¾çæè¿°è¿éåå¾çæè¿°

(3)算法实现

(4)算法特点

优点:效率高,数据移动少;缺点:不稳定,增量的取值是多少,应取多少个不同的值,都无法确切地知道,只能凭经验取

部分转载:(1)超详细的八大排序算法的各项比较以及各自的特点_排序算法比较_m0_37962600的博客-CSDN博客

                  (2)图解排序算法及实现——希尔排序 (Shell Sort)_shellsort步长_Zhang_Raymond的博客-CSDN博客

总结

对各个排序算法排序所需的时间进行比较:

测试数据为1W个时

测试数据为10W个时

从上述运行效果上来看,堆排序、归并排序、基数排序是真的快。

对于快速排序迭代深度超过的问题,可以考虑将快排通过非递归的方式进行解决。

部分转载:(1)超详细的八大排序算法的各项比较以及各自的特点_排序算法比较_m0_37962600的博客-CSDN博客

                  (2)数据结构常见的八大排序算法_ZS_Wang_Blogs的博客-CSDN博客

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值