浅谈排序算法--排序算法的分析

排序对于任何接触过程序的人来说都不会陌生。在大部分的编程语言中也提供了排序函数。常用的排序算法有:冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序。

1.如何分析一个算法

1.排序算法的执行效率

对于排序算法的执行效率,一般从下面几个方面来分析
(1)最好情况、最坏情况、平均情况时间复杂度
为什么要区分这三种时间复杂度呢?
第一,有些排序算法会区分,为了好对比,所以我们最好都做一下区分。
第二,对于要排序的数据,有的接近有序,有的完全无序。有序度不同的数据,对于排序的执行时间肯定是有影响的,我们需要知道排序算法在不同数据下的性能表现。

(2)时间复杂度的系数、常数、低阶
时间复杂度反映的是数据规模随着n的增长而呈现出的一种增长趋势,所以当数据规模很大的时候,我们可以忽略系数、常数和低阶。但是在实际的软件开发中,并不是所有的数据规模都会很大,因此在规模很小的时候,我们就必须把系数、常数、低阶考虑进来。

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

2.排序算法的内存消耗
内存的消耗一般通过空间复杂度来衡量。这里有一个概念,原地排序。原地排序算法,就是特指空间复杂度是O(1)的排序算法。

3.排序算法的稳定性
仅仅用时间复杂度和空间复杂度来分析排序算法的好坏是远远不够的。对于排序算法,还要第三个指标,稳定性。稳定性是指如果待排序的序列中存在值相等的元素,经过排序之后,相等元素之间原有的先后顺序不变。比如,2、7、4、2、8、5排序之后为2、2、4、5、7、8 其中的两个2,如果排序前后的顺序没有改变,那么就称这种排序算法为稳定的排序算法,如果前后顺序发生变化,那么这种排序算法就叫做不稳定的排序算法

对于稳定性的理解和应用我们来看一个例子,在网上商城购物会产生大量的订单数据,每条订单数据肯定会包含订单金额和下单时间这两个属性。此时我们要对这些订单进行排序。最先想到的方法就是对金额进行排序,之后再根据下单时间来进行排序,最后我们得到的就是相同金额下按照下单时间的排序结果。

那么我们借助稳定的排序算法可以考虑另一种方法,我们先对下单时间进行排序,之后用稳定的排序算法对金额进行排序,那么我们也可以得出相同的结果。如果使用了不稳定的排序算法,我们可能得到结果中的下单时间就可能不会有序了。
常用算法的分析如下图所示:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值