首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Python-排序-有哪些时间复杂度为O(n)的排序算法?

    前几篇文章介绍了几个常用的排序算法:冒泡、选择、插入、归并、快速,他们的时间复杂度从 O(n^2) 到 O(nlogn),其实还有时间复杂度为 O(n) 的排序算法,他们分别是桶排序,计数排序,基数排序...,因为这些排序算法的时间复杂度是线性的,所以这类算法也叫线性排序。...下面我给出每一种算法的实现思路,Python程序实现和应用场景。...根据每一位来排序,我们利用上述桶排序或者计数排序,它们的时间复杂度可以做到 O(n)。如果要排序的数据有 k 位,那我们就需要 k 次桶排序或者计数排序,总的时间复杂度是 O(k*n)。...,每次计数排序时间复杂度为 O(n),因此使用基数排序对类似这样的数据排序时间复杂度也为 O(n)。

    1.5K20

    排序算法】经典空间换时间基数排序

    基数排序的说明: 基数排序 经典空间换时间的思想流排序算法 基数排序(桶排序)介绍 基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket...,分桶,一般来说排序的次数和最大数的位数一致,但是空间占用会越来越大,金典的空间换时间的算法 第二轮 最后 动图演示 代码思路实验 要求:将数组 {53, 3, 542, 748, 14, 214...名明确,基数排序是使用空间换时间的经典算法 int[][] bucket = new int[10][arr.length]; //为了记录每个桶中,实际存放了多少个数据...使用到了1g的内存,从各方面都可以看出,基数排序是经典的空间换时间的算法 基数排序的说明: 基数排序是对传统桶排序的扩展,速度很快....基数排序是经典的空间换时间的方式,占用内存很大, 当对海量数据排序时,容易造成 OutOfMemoryError 。 基数排序时稳定的。

    60130

    线性时间非比较类排序

    原理:不通过比较来决定元素间的相对次序,它可以突破基于比较排序时间下界,以线性时间运行,因此称为线性时间非比较类排序。...*      * 缺点:桶排序需要尽量保证元素分散均匀,否则当所有数据集中在同一个桶中时,桶排序失效      *      * 分析:      * 时间复杂度:      * 最好:...O(n+k)      * 最坏:O(n^2)      * 平均时间复杂度: O(n+k)      * 空间复杂度: O(n+k)      * 稳定性:稳定(其稳定性是根据桶内排序使用的算法)      ...     *      * 原理:      *      * 分析:      * 时间复杂度:      * 最好:O(d*(n+r))      * 最坏:O(d*(n+r))...* 基数排序基于分别排序,分别收集,所以其是稳定的排序算法      *      * 分析:      * 时间复杂度:      * 最好:O(d*(n+r))      * 最坏:O(d*

    99120

    排序算法的 Python 实现以及时间复杂度分析

    我用 Python 实现了冒泡排序、选择排序、插入排序、归并排序、快速排序。...high = len(nums)-1 sort(nums,aux,low,high) return nums 时间复杂度:O (nlogn) 快速排序 快速排序是一种分治的排序算法...来源:快速排序 python 实现 简单实现 下面的代码短小利于理解,但是空间复杂度大,使用了三个列表解析式,而且每次选取进行比较时需要遍历整个序列。...有意思的是如果每次选第一个数做基准值,但每次这个数又是最小值,那么序列本身就是有序的,但时间复杂度也是最高的 因此,要想优化时间复杂度,关键在于基准值的选择。 快速排序的优化 1....这个因为 Python 中默认的最大递归深度是 989。

    1.6K20

    Python 冒泡排序_python

    要学习冒泡排序必须知道它的原理: 冒泡排序算法的原理如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。...这里面有n个数字,你要对其进行从大到小的排序的话,你就要拿相邻的两个数进行比较,如果第一个数比第二个大就交换他们的位置:第二个就和第三个比较,一直这样下去,直到最小的就会在最后面了,然后继续从第一和第二个进行比较...4,5,3,6,2,1 4,5,6,3,2,1 第4轮:4,5,6,3,2,1 5,4,6,3,2,1 5,6,4,3,2,1 第5轮:5,6,4,3,2,1 6,5,4,3,2,1 由上面可以清楚了解到一个进行了五轮排序...a_list[i] if a_list[i] < a_list[i+1]: a_list[i] = a_list[i+1] a_list[i+1] =tmp print(a_list) 这样就是冒泡排序

    1.2K40

    【算法复习3】时间复杂度 O(n) 的排序排序 计数排序基数排序

    对要排序的数据要求很苛刻 重点的是掌握这些排序算法的适用场景 【算法复习3】时间复杂度 O[n] 的排序排序 计数排序基数排序排序(Bucket sort) 时间复杂度O(n) 苛刻的数据...每个桶内部使用快速排序时间复杂度为 O(k * logk) m 个桶排序时间复杂度就是 O(m * k * logk) 当桶的个数 m 接近数据个数 n 时,log(n/m) 就是一个非常小的常量,...这个时候桶排序时间复杂度接近 O(n) 苛刻的数据 排序的数据需要很容易就能划分成 m 个桶 每个桶内的数据都排序完之后,桶与桶之间的数据不需要再进行排序。...除此之外,每一位的数据范围不能太大,要可以用线性排序算法来排序,否则,基数排序时间复杂度就无法做到 O(n) 了。...评论区大佬的总结 总结:桶排序、计数排序、基数排序 一、线性排序算法介绍 1.线性排序算法包括桶排序、计数排序、基数排序。 2.线性排序算法的时间复杂度为O(n)。

    1.8K10

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券