排序算法重要知识点

经典排序算法及特性:

这里写图片描述

经典排序算法的空间复杂度:
O(1):冒泡、选择、插入、堆、希尔排序
O(logN)~O(N):快速排序
O(N):归并排序
O(M):计数排序、基数排序

经典排序算法的稳定性:
  稳定性概念:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。

稳定的排序:冒泡、插入、归并、计数、基数、桶排序
不稳定的排序:选择、快排、堆、希尔排序

一、时间复杂度为O(N^2)的算法有:冒泡排序、选择排序、插入排序;

1.冒泡排序:
  第一个数与第二个数比较,大的放后面;第二个数与第三个数,第三个数与第四个数……依次比较,这样一来最大数放在最后。前n-1个数重复上述过程即可得到有序数组。

这里写图片描述

2.选择排序:
  在n个数中选出最小的数放在第一个位置,剩下n-1个数选出最小的数放在第二个位置,依次排序。
  或者,找出最大的一个元素,和末尾的元素交换,然后再从头开始,查找第1个到第N-1个元素中最大的一个,和第N-1个元素交换……其实差不多就是冒泡法的思想,但整个过程中需要移动的元素比冒泡法要少,因此性能是比冒泡法优秀的

3.插入排序

http://pic002.cnblogs.com/img/yc_sunniwell/201006/2010062815150025.png

二、时间复杂度为O(nlogn)的算法有:归并排序、快速排序、堆排序、希尔排序;

1.归并排序:  
  第一个数和第二个数,第三个数和第四个数……两两归并、排序,再把相邻的有序区间合并、排序,依次重复进行。

2.快速排序:
  随机选择一个数(例如最后一个数),比它小的放左边,比它大的放右边,左右两部分分别递归排序。

这里写图片描述

3.堆排序

这里写图片描述

  首先建立大小为n的大根堆,堆顶元素(即最大值)与最后一个元素交换,将其脱离大根堆存入有序数组;剩下部分进行大根堆调整后依次拿出堆顶最大值,存入有序数组即可。

4.希尔排序
希尔排序(Shell Sort)是插入排序的一种改良排序算法。关键在于步长的选择。
如图选择步长为4的数比较->步长为3比较->步长为2比较->最终步长为1比较结束。

这里写图片描述

三、时间复杂度为O(n)的算法有:计数排序、基数排序;

不是基于比较的排序算法,思想来自于桶排序。

1.计数排序

将各元素放入排好序的桶中,拿出后即排好序。

2.基数排序

这里写图片描述

先按个位数放入桶中排序,拿出序列;再分别按十位、百位放入桶中排序

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值