排序算法及其特点

在这里插入图片描述

直接插入

类似打牌时保证抓过的牌有序排列,插入过程是稳定的,时间复杂度O(n²)
同时适用于顺序结构和链式结构
当待排序的记录个数较少且待排序序列的关键字基本有序时,效率较高

折半插入

折半插入的对象移动次数与直接插入相同,在平均情况下,折半插入仅减少了关键字间的比较次数,而移动次数不变,因此时间复杂度为O(n²)
因为要进行折半查找,所以只能用于顺序结构,不能用于链式结构

希尔排序

实质上是分组插入,为了减少参与直接插入排序的数据量,先将整个待排序记录分成几组,对每组分别进行直接插入排序,然后增加每组的数据量,重新分组
经过几次分组排序后,整个序列中的元素“基本有序”时,再对全体记录进行一次直接插入排序
记录跳跃式地移动导致排序方法是不稳定的
只能用于顺序结构,不能用于链式结构

冒泡排序

两两比较相邻记录的关键字,遇到逆序则交换,时间复杂度为O(n²),是稳定排序
同时适用于顺序结构和链式结构

快速排序

设置枢轴(一般选择待排序表的第一个记录),然后双指针碰撞,时间复杂度为O(nlog(n))
记录非顺次地移动导致该排序方法是不稳定的
排序过程中需要定位表的上下界,所以适合用于顺序结构,很难用于链式结构

简单选择排序

每一趟从待排序的记录中选出关键字最小的记录,按顺序放在已排序的记录序列的最后,直到全部排完为止,时间复杂度为O(n²)
若采用“交换记录”的策略,则算法是不稳定的
同时适用于顺序结构和链式结构

堆排序

堆排序是一种树形选择排序,将待排序记录看成是一棵完全二叉树的顺序存储结构,大根堆的堆顶记录的关键字最大,小根堆的堆顶记录的关键字最小
堆排序的运行时间主要耗费在建初堆和调整堆时进行的反复“筛选”上,时间复杂度为O(nlog(n))
是不稳定排序
只能用于顺序结构,不能用于链式结构

归并排序

将两个或两个以上的有序表合并成一个有序表的过程,双指针赛跑,时间复杂度为O(nlog(n))
是稳定排序
可用于链式存储结构,且不需要附加存储空间,但递归实现时需要开辟相应的递归工作栈

基数排序

分配、收集多次交替
(1)最低位优先、最高位优先(在纯数值排序时一般不用)
(2)单关键字排序、多关键字排序(如排若干张扑克牌,有花色、面值两种关键字,需要两种桶,13个面值桶,4个花色桶)
基数排序使用条件有严格的要求:需要知道各级关键字的主次关系和各级关键字的取值范围
时间复杂度可以突破基于关键字比较一类方法的下界O(nlog(n)),达到O(n)
是稳定排序
同时适用于顺序结构和链式结构

计数排序

关于计数排序,可以看这篇文章什么是计数排序?
从一个文件里面读取一百万个32位整数,排序后输出到文件,程序运行在64位PC上。整数数值范围在0到500之间。程序的内存限制是2K。要求1秒内出结果。
选择计数排序

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值