常用的排序算法以及实现

本文详细介绍了各种排序算法,包括冒泡排序、插入排序、选择排序、归并排序和快速排序,强调了它们的执行效率、内存消耗和稳定性。特别讨论了快速排序的优化策略,如三数取中法和随机法。此外,还提及了非比较排序算法如桶排序、计数排序和基数排序的应用场景和特性。
摘要由CSDN通过智能技术生成

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

排序算法的执行效率

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

        2.时间复杂度的系数、常数 、低阶

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

排序算法的内存消耗

算法的内存消耗可以通过空间复杂度来衡量,排序算法也不例外。原地排序算法,就是特指空间复杂度是O(1)的排序算法

排序算法的稳定性

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

排序方式 平均复杂度 最坏复杂度 最好复杂度 空间复杂度 稳定性 是否原地排序 复杂度
冒泡 O(n2) O(n2)

O(n)

O(1) 稳定 简单
插入 O(n2) O(n2) O(n) O(1) 稳定 简单
选择 O(n2) O(n2) O(n2) O(1) 不稳定 简单
归并 O(nlogn) O(nlogn) O(nlogn) O(n) 稳定 较复杂
快速 O(nlogn) O(n2) O(nlogn) O(1) 不稳定 较复杂
O(n) - - - 稳定 较复杂
计数 O(n+k) k是数据范围 - - - 稳定 较复杂
基数 O(dn) d是维度 - - - 稳定
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
几种常见排序 基于比较的排序算法: 下界是 nlgn 1.1 SelectionSort:每次选出最下的元素,放在当前循环最左边的位置。 1.2 BubbleSort:每次比较相邻的两个数,使得最大的数像气泡一样冒到最右边。 1. 3 InsertionSort:每次拿起一个数,插入到它左边数组的正确位置。 1.4 QuickSort:选择一个数,作为标准,小于它的放在左边,大于它的放在右边。并把它放在间;递归地对左右子数组进行排序实现时:1. 确定递归结束条件,初始化左右游标, 选择标准数; 2. while循环,do while实现两个游标同时向间移动,置换; 3. 置换标准数和右边游标所指的数; 4. 递归调用,对左右子数组进行排序。 1. 5 HeapSort:用最大堆实现实现时:建堆:置换堆顶元素和最后一个元素,堆大小减少,保持新的堆为最大堆; 保持最大堆: 从底向上依次保持最大堆,从第一个父节点到根部。 1.6 MergeSort:拆分数组,递归实现排序,二路归并。用哨兵来阻止游标的越界。 线性时间运行的算法: 1.7 CountingSort: 假设数据分布在0到k之间的。对于每个输入x,确定出小于x的数的个数。假设小于x的数有17个,那么x就应该在第18个输出位置。 1. 8 Radix sort(基数排序):从最低位开始,每位采用稳定的排序算法(如计数排序)。 1.9 Bucket sort:当输入数据比较均匀时采用。 先将数据区间分为n个桶,把数据分放到对应的桶;对桶内的数据采用插入排序;再把各个桶的排序结果串起来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值