排序算法比较

算法综合比较

排序算法时间复杂度空间复杂度稳定性
直接插入 O(n2) O(1) 稳定
shell排序 O(n1.3) O(1)
直接选择 O(n2) O(1)
堆排序 O(log2n) O(1)
冒泡排序 O(n2) O(1) 稳定
快速排序 O(nlog2n) O(log2n)
归并排序 O(nlog2n) O(n) 稳定

1.直接插入

示例

直接插入

2.希尔排序

给定增量,比较两边元素大小进行交换,不断减小增量,重复上述过程,得最终排序结果

示例

希尔排序

3.直接选择

基本思想:第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,第二次从R[1]~R[n-1]中选取最小值,与R[1]交换,….,第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换,…..,第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列。

示例

直接选择

4.堆排序

利用大根堆(小根堆)的堆顶元素最大(最小)的性质进行排序,基本操作:建堆,调整堆,堆排序。

特点:

1. 大根堆用于升序;小根堆用于降序

2.1 堆的插入,调整堆的时候一层层进行调整

2.2 堆顶元素的删除,由最后一个叶节点替换堆顶,然后自上而下一层一层调整堆

3. 对堆进行中序遍历即可得到排序

4. 堆排序适用于选取最大(最小)的前几个数据

建立大根堆示例

建堆

5.冒泡排序

冒泡排序算法的运作如下:(从后往前)冒泡排序算法的运作如下:(从后往前)

1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。

2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。(辨别冒泡算法,可以观察每趟排序最后的元素是不是最大的)

3.针对所有的元素重复以上的步骤,除了最后一个。

4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较

快速排序

该方法的基本思想是:

1.先从数列中取出一个数作为基准数。

2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。

3.再对左右区间重复第二步,直到各区间只有一个数。

第一趟示例

快速排序

总体过程示例

这里写图片描述

6.归并排序

分而治之的思想

示例

归并排序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值