排序【一】如何分析一个排序算法

分类

冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序
在这里插入图片描述

如何分析一个“排序算法”?

排序算法的效率

最好情况、最坏情况、平均情况时间复杂度

之所以要区分这三种时间复杂度。第一是因为有些排序算法会区分,为了好对比,我们最好都做一下区分。第二,对于要排序的数据,有的接近有序,有的完全无序。有序不同的数据,对于排序的执行时间肯定是有影响的,我们要知道排序算法在不同数据下的性能表现。

考虑时间复杂度的系数、常数 、低阶

时间复杂度是在数据规模n很大的时候,忽略了系数、常数、低阶。但是实际的软件开发中,我们排序的可能是 10 个、100 个、1000 个这样规模很小的数据,所以,在对同一阶时间复杂度的排序算法性能对比的时候,我们就要把系数、常数、低阶也考虑进来。

比较次数和交换(或移动)次数

基于比较的排序算法的执行过程,会涉及两种操作,一种是元素比较大小,另一种是元素交换或移动。所以,如果我们在分析排序算法的执行效率的时候,应该把比较次数和交换(或移动)次数也考虑进去。

排序算法的内存消耗

针对排序算法的空间复杂度,我们还引入了一个新的概念,原地排序(Sorted in place)。原地排序算法,就是特指空间复杂度是 O(1) 的排序算法。

冒泡、插入、选择都是原地排序

排序算法的稳定性

稳定性:如果待排序的序列中存在值相等的元素,经过排序之后,相等元素之间原有的先后顺序不变。

通过一个例子来解释一下。比如我们有一组数据 2,9,3,4,8,3,按照大小排序之后就是 2,3,3,4,8,9。这组数据里有两个 3。

经过某种排序算法排序之后,如果两个 3 的前后顺序没有改变,那我们就把这种排序算法叫作稳定的排序算法;如果前后顺序发生变化,那对应的排序算法就叫作不稳定的排序算法。

为何需要考察算法的稳定性?

算法稳定性的用处,多次排序中,下一次排序需要依赖上一次排序的稳定结果。比如订单排序中,先按时间排序,再使用稳定排序算法按价格排序,最终要得到同个价格的订单按下单时间排序,就需要算法稳定性。

有序度、逆序度

有序度是数组中具有有序关系的元素对的个数。

有序元素对:a[i] <= a[j], 如果i < j。

image.png

同理,对于一个倒序排列的数组,比如 6,5,4,3,2,1,有序度是 0;对于一个完全有序的数组,比如 1,2,3,4,5,6,有序度就是 n*(n-1)/2,也就是 15。我们把这种完全有序的数组的有序度叫作满有序度。

逆序度

逆序元素对:a[i] > a[j], 如果i < j。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值