十大排序算法总结

排序算法思路简述平均时间复杂度最坏时间复杂度最好时间复杂度空间复杂度稳定性数据敏感性
冒泡排序每排序一次,将剩余数里面最大数冒到最上面(最上面的是顺序排好的),从第1个开始,最后一个位置不用参与外层循环O(n²)O(n²)O(n)O(1)稳定敏感
选择排序每次找出最小的排到最后,最后一个不用参与循环O(n²)O(n²)O(n²)O(1)不稳定不敏感
插入排序每排序一次,将i插入到已经排好序的部分合适位置(最下面的是顺序排好的),从第2个数开始,第一个不用排,不用参与外层循环O(n²)O(n²)O(n)O(1)稳定敏感
快速排序快速排序的思想就是,选一个数作为基数(这里我选的是第一个数),大于这个基数的放到右边,小于这个基数的放到左边,等于这个基数的数可以放到左边或右边,一趟结束后,将基数放到中间分隔的位置,第二趟将数组从基数的位置分成两半,分割后的两个的数组继续重复以上步骤,选基数,将小数放在基数左边,将大数放到基数的右边,在分割数组,,,直到数组不能再分为止,排序结束。O(nlgn)O(n²)O(nlgn)O(nlgn)不稳定敏感
堆排序构造大堆 小堆O(nlgn)O(nlgn)O(nlgn)O(1)不稳定不敏感
希尔排序交叉指数递减 然后循环插入排序O(nlgn)O(ns)O(n)O(1)不稳定敏感
归并排序先拆开,再两组大小确定的数组排序合并,有可能是不对称的情况O(nlgn)O(nlgn)O(nlgn)O(n)稳定不敏感
计数排序* 中间数组 通过数组下标来表示原始数组的值,来统计每个元素出现的次数,然后新建一个数组将 中间数组 出现了几次,我就打印几次 到新的数组;不受O(nlgn)下界约束O(n+k)O(n+k)O(n+k)O(n+k)稳定
基数排序按照个位十位百位逐次排序O(N*M)O(N*M)O(N*M)O(M)稳定敏感(象整型、字符串这样能分解,若是浮点型那就不行了)
桶排序桶排序假设待排序的一组数均匀独立的分布在一个范围中,并将这一范围划分成几个子范围(桶)。然后基于某种映射函数f ,将待排序列的关键字 k 映射到第i个桶中 (即桶数组B 的下标i) ,那么该关键字k 就作为 B[i]中的元素 (每个桶B[i]都是一组大小为N/M 的序列 )。接着将各个桶中的数据有序的合并起来 : 对每个桶B[i] 中的所有元素进行比较排序 (可以使用快排)。然后依次枚举输出 B[0]….B[M] 中的全部内容即是一个有序序列。O(n+k)O(n²)O(n)O(n+k)不稳定敏感
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值