算法之排序(上)

本文介绍了三种常见的O(n^2)时间复杂度的排序算法:冒泡排序、插入排序和选择排序。冒泡排序通过相邻元素比较交换实现排序,插入排序则是将元素插入已排序区间,而选择排序每次在未排序区间选取最小值放到已排序末尾。这些算法的空间复杂度为O(1),是原地排序,但冒泡排序和插入排序是稳定的,选择排序则不是。
摘要由CSDN通过智能技术生成

文章来源:http://blog.seclibs.com/算法之排序(上)/

排序算法有很多种,甚至有很多都完全没有听过,我们最常见,也最经典的就是:冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序。

按照时间复杂度来进行划分可以将其划分为三类

  • O(n2) :冒泡、插入、选择;基于比较
  • O(nlogn):快排、归并;基于比较
  • O(n):桶、计数、基数;不基于比较

这次我们来说时间复杂度为O(n2)的

在说具体的排序方法之前,先明确排序算法的评价标准

首先是排序算法的执行效率,执行效率一般从最好、最坏、平均时间复杂度上分析,其分析时间复杂度时需要考虑系数、常数和低阶,因为时间复杂度是在数据规模特别大的时候的增长趋势,在平时的代码中,数量级都是比较小的,所以还需要考虑这些问题。在基于比较的排序算法中,数值比较的次数和数据的移动次数也都是需要考虑进去的。

其次是内存的消耗,算法的内存消耗可以用空间复杂度来表示,当空间复杂度为O(1)的算法也可以称之为原地排序算法。

最后是算法的稳定性,当一组数据中有两个相同的值时,排序之后两个值的顺序是如果没有交换那它就是具有稳定性的算法。

然后我们再引入两个概念,有序度逆序度

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

比如说2、4、3、1、5、6这组数组的有序度是11,因为它有11个有序元素对,分别是(2,4)、(2,3)、(2,5) (2,6)、(4,5)、(4,6)、(3,5)、(3,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值