首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏swag code

    BucketSort-排序-计数排序

    import java.util.Arrays; public class BucketSort { //排序-计数排序 public static void bucketSort(int[]

    30550发布于 2018-08-20
  • 来自专栏python3

    计数排序排序python实现

    计数排序排序python实现 计数排序 计数排序原理: 找到给定序列的最小值与最大值 创建一个长度为最大值-最小值+1的数组,初始化都为0 然后遍历原序列,并为数组中索引为当前值-最小值的值 计数排序实现 下面为列表的计数排序 def count_sort(s): """计数排序""" # 找到最大最小值 min_num = min(s) max_num = 当数值中有非整数时,计数数组的索引无法分配 排序 排序原理: 排序计数排序类似,但可以解决非整数的排序 排序相当于把计数数组划分为按顺序的几个部分 每一部分叫做一个,它来存放处于该范围内的数 main__': a = [3.2,6,8,4,2,6,7,3] bucket_sort(a) print(a) # [2, 3, 3.2, 4, 6, 6, 7, 8] 总结 计数排序排序都是以牺牲空间换时间 排序中尽量使每个中的元素个数均匀分布最好 ​

    1.2K10发布于 2020-01-16
  • 来自专栏小樱的经验随笔

    基数排序排序计数排序【详解】

    排序简单入门篇^-^ 在我们生活的这个世界中到处都是被排序过的东东。 这种排序方法我们暂且叫它“排序”。因为其实真正的排序要比这个复杂一些,以后再详细讨论,目前此算法已经能够满足我们的需求了。 这个算法就好比有11个,编号从0~10。 在一般情况下,每个结点有d 位关键字,必须执行d 次分配和收集操作。 基本操作 根据获得的数据表的范围,分割成不同的buckets,然后直接统计数据在buckets上的频次,然后顺序遍历buckets就可以得到已经排好序的数据表。 k个buckets来统计数据频次,共需要两趟来实现排序,第一趟增量计数进行统计,第二趟将计数统计的对应的数重写入原始数据表中。

    1.1K70发布于 2018-04-09
  • 来自专栏C++信息学奥赛

    杨校老师课堂之排序——计数

    t,对应位置的计数 + 1)。 (三) 核心算法思想频率统计(计数思想)核心逻辑:用数组作为 “计数器”,通过 a[t]++ 实现对每个数字出现次数的累加。优势:时间复杂度为 O (n)(n 为输入数量),比用嵌套循环统计更高效。 【输入样例】10 43 2 3 1 2 1 3 4 2 4【输出样例】23#include<iostream> // 包含输入输出流头文件,用于输入输出操作using namespace std; 【输入样例】5 32 4 5【输出样例】1 3#include<iostream> // 包含输入输出流头文件,用于输入输出操作using namespace std; // 使用标准命名空间,方便使用其中的函数和对象 #include<iostream> // 包含输入输出流头文件,用于输入输出操作using namespace std; // 使用标准命名空间,方便使用其中的函数和对象 int a[21] =

    11900编辑于 2025-07-03
  • 来自专栏C++信息学奥赛

    杨校老师课堂之排序算法——标记计数练习

    从标准输入读取一个整数到 t t = t + 50; // 将 t 加上 50 ++a[t]; // 将数组 a 中下标为 t 的元素值加 1 } // 遍历每个查找出现次数超过一半数字 一起来找k题目描述输入n(n<=5000)个整数,并进行从小到大排序,找到第k个位置的值并进行输出(相同大小数字只计算一次),k<=1000,正整数均小于30000。 cnt 并初始化为 0 // 遍历每一个对出现数字进行计数 for(int i = 1; i <= 30000; ++i){ // 循环 30000 次,从 1 到 30000 = 0){ // 如果数组 a 中下标为 i 的元素值不为 0 ++cnt; // 计数器 cnt 加 1 if(cnt == k){ // 如果计数器 整数去重题目描述给定含有n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的数,只保留该数第一次出现的位置,删除其余位置。

    6700编辑于 2025-07-05
  • 来自专栏LeetCode

    排序计数排序、 基数排序 && 排序后邻数最大差值

    一.排序计数排序、 基数排序 非基于比较的排序, 与被排序的样本的实际数据状况很有关系, 所 以实际中并不经常使用 时间复杂度O(N), 额外空间复杂度O(N) 稳定的排序 二.排序后邻数最大差值 给定一个数组, 求如果排序之后, 相邻两数的最大差值, 要求时 间复杂度O(N), 且要求不能用非基于比较的排序。 len, long min, long max) { return (int) ((num - min) * len / (max - min)); } n 个数采用n+1个, 那么会存在一个空桶,所需要的结果一定不在一个的内部。 最终的结果也并不是存在一个空桶的两侧 最终的结果是需逐个比较 这里存在一个空桶,那么最终的结果将不会在一个的内部,这也是空桶的作用

    48730发布于 2019-02-18
  • 来自专栏毛利学Python

    八十五、再探希尔排序排序计数排序和基数排序

    「---- Runsen」 关于排序,其实还有很多,比如常见的希尔排序排序计数排序和基数排序,今天一口气把十大排序剩下的全部解决。 随着步长逐渐减小(「进行除以二操作」),所分成的组包含的记录越来越多,当步长的值减小到 1 时,整个数据合成为一组,构成一组有序记录,则完成排序计数排序的核心思想:遍历待排序的数据,寻找最大值 k,然后开辟一个长度为k+1的计数列表,计数列表中的值都为0。如果走访到的元素值为i,则计数列表中索引i的值加1。 个人觉得排序其实也是一个分治算法的思想,我想到排序,就会联想到高考分数排名,广东高考七十多万考生,我们只需要对不同区域进行划分,比如在700到750这个阶段的人数进行排序,其实对不同区域进行划分这个操作排序计数排序和基数排序全部介绍完毕,后面引入有向图,最后进行烧脑的动态规划DP算法。

    57720编辑于 2022-08-17
  • 来自专栏全栈修炼

    JavaScript 数据结构与算法之美 - 排序计数排序、基数排序

    之所以把 计数排序排序、基数排序 放在一起比较,是因为它们的平均时间复杂度都为 O(n)。 排序(Bucket Sort) 排序计数排序的升级版,也采用了分治思想。 思想 将要排序的数据分到有限数量的几个有序的里。 每个里的数据再单独进行排序(一般用插入排序或者快速排序)。 关键在于理解最后反向填充时的操作。 使用条件 只能用在数据范围不大的场景中,若数据范围 k 比要排序的数据 n 大很多,就不适合用计数排序。 我们只需要依次扫描每个,将内的考生依次输出到一个数组中,就实现了 50 万考生的排序。 因为只涉及扫描遍历操作,所以时间复杂度是 O(n)。 分析 第一,计数排序是原地排序算法吗 ? 因为计数排序的空间复杂度为 O(k),k 是的个数,所以不是原地排序算法。 第二,计数排序是稳定的排序算法吗 ?计数排序不改变相同元素之间原本相对的顺序,因此它是稳定的排序算法。

    80641发布于 2019-07-30
  • 来自专栏java,python,数据结构,算法

    十大经典排序算法详解(三)-堆排序,计数排序,排序,基数排序

    这一篇文章真的耗费了我巨大的时间和精力,由于 堆排序是基于二叉树 的,所以写的篇幅比较大并且由于是关于树的,所以画图动态演示的工程量就进一步增加,其次就是因为计数排序,排序以及基数排序并不是基于比较的 : 计数排序的基本思想基本就是这样,按照惯例,还是通过下面的图来帮助大家更好的理解计数排序的基本思想: 了解完计数排序的基本思想之后,我们还是按照惯例分析一下计数排序算法的一些特点: -计数排序是稳定的 又假设我们的数量太多,就比如说有MAX-MIN+1个: 那么很显然这时候的排序又重新退化成了我们上面刚刚讲解过的计数排序了. 接下来我们还是通过下面的图来动态演示一下排序的过程: 了解完排序的基本思想之后,按照惯例我们还是来简单分析一下他的一些特点: 排序是稳定的,原因和上面计数排序的理由是一样的. : 基数排序是稳定的,原因和排序以及计数排序的原因一样.

    65150发布于 2021-02-02
  • 来自专栏小樱的经验随笔

    简化版排序操作模版

    1 //简化版的排序,时间复杂度为O(2*(m+n))->O(m+n) 2 //处理的问题:随机输入几组数,对这几组数进行自动排序操作(从小到大或从大到小排序) 3 #include <bits 1;i<=10;i++) 41 { 42 int x; 43 cin>>x; 44 a[x]++; 45 } 46 //从小到大排序 中某个数出现的次数,出现几次打印几次 51 { 52 cout<<i<<" "; 53 } 54 } 55 */ 56 //从大到小排序

    40740发布于 2018-04-09
  • 来自专栏全栈程序员必看

    十大经典排序算法详解(三)-堆排序,计数排序,排序,基数排序

    十大经典排序算法-堆排序,计数排序,排序,基数排序 前言 这是十大经典排序算法详解的最后一篇了. 又假设我们的数量太多,就比如说有MAX-MIN+1个: 那么很显然这时候的排序又重新退化成了我们上面刚刚讲解过的计数排序了. 接下来我们还是通过下面的图来动态演示一下排序的过程: 了解完排序的基本思想之后,按照惯例我们还是来简单分析一下他的一些特点: 排序是稳定的,原因和上面计数排序的理由是一样的. 时间复杂度 排序的时间复杂度和上面的计数排序是一样的,同样也是线性级别的,但是也是增加了的时间,所以也是O(n+k) 空间复杂度 上面我们已经说过了,排序本身也是一个通过空间来换取时间的算法 : 基数排序是稳定的,原因和排序以及计数排序的原因一样.

    43720编辑于 2022-09-14
  • 来自专栏刷题笔记

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

    计数排序(Counting sort) 计数排序其实是排序的一种特殊情况 例子 高考的 一分一档 数据先入 ? 然后 顺序求和 更新数据 ? 评论区大佬的总结 总结:排序计数排序、基数排序 一、线性排序算法介绍 1.线性排序算法包括排序计数排序、基数排序。 2.线性排序算法的时间复杂度为O(n)。 3.此3种排序算法都不涉及元素之间的比较操作,是非基于比较的排序算法。 4.对排序数据的要求很苛刻,重点掌握此3种排序算法的适用场景。 三、计数排序(Counting sort) 1.算法原理 1)计数其实就是排序的一种特殊情况。 4)每次排序有序数据范围较小,可以使用排序计数排序来完成。

    2.5K10发布于 2021-04-14
  • 来自专栏C++信息学奥赛

    杨校老师课堂之不去重排序算法——计数应用专项题单

    排序题目描述输入5个不大于10的正整数,请按照从小到大的顺序输出这5个数。输入描述输入5个正整数。输出描述从小到大顺序输出5个数。中间用空格隔开。

    7400编辑于 2025-07-03
  • 来自专栏我的博客

    排序

    排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里。 每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用排序进行排序) 思想: 设待排序序列的元素取值范围为0到m,则我们新建一个大小为m+1的临时数组并把初始值都设为0,遍历待排序序列 ,把待排序序列中元素的值作为临时数组的下标,找出临时数组中对应该下标的元素使之+1;然后遍历临时数组,把临时数组中元素大于0的下标作为值按次序依次填入待排序数组,元素的值作为重复填入该下标的次数,遍历完成则排序结束序列有序 示例: $v){ for($i = 0; $i < $v; $i++) { echo $k; } } 应用大量数据排序 比如9亿不重复的9位数字排序,可以初始化

    65360发布于 2018-04-28
  • 来自专栏用户2442861的专栏

    排序

    每个桶子再个别排序(有可能再使用别的排序算法或是以递回方式继续使用排序进行排序)。排序是鸽巢排序的一种归纳结果。当要被排序的阵列内的数值是均匀分配的时候,排序使用线性时间(Θ(n))。 但排序并不是 比较排序,他不受到 O(n log n) 下限的影响。        总共有100个。然后对A[1..n]从头到尾扫描一遍,把每个A[i]放入对应的B[j]中。 然后再对这100个中每个里的数字排序,这时可用冒泡,选择,乃至快排,一般来说任何排序法都可以。 int indexs[10];//各个下标计数索引 int i,j;   //分配动态内存作为 for(i=0;i<10;++i)           buckets 当然排序的空间复杂度为O(N+M),如果输入数据非常庞大,而的数量也非常多,则空间代价无疑是昂贵的。此外,排序是稳定的。

    66240发布于 2018-09-14
  • 来自专栏数据结构与算法

    排序

    排序        排序的思想是若待排序的记录的关键字在一个明显有限范围内(整型)时,可设计有限个有序,每个桶装入一个值(当然也可以装入若干个值),顺序输出各的值,将得到有序的序列。

    53390发布于 2018-04-12
  • 来自专栏用户1175783的专栏

    # 排序

    # 排序 # 原理 求出无序集合的最大值与最小值(这里的最小值指存在负数的情况),创建对应的数组长度 length=max+1 这里要处理一下负数 if min<0: length+=abs(min) 该length就是数组的长度,并创建这个数组将所有值初始化为0 然后遍历无须数组,修改中元素的个数(数组所以对应的值就是无需数组中相同值的个数) 最后只需要将数组中值大于 # 实现 inputArr = [ 11,10,199383, 34, -1,-32,-29, 4, 0, 34, 5, 4, 36, 1, 8, 123, 453, 1008] print("未排序集合 minItem>item): minItem=item # 最小值,最大值 print("min:{0}\tmax:{1}".format(minItem,maxItem)) # 创建数组 0): sortArr[sortIndex]=index bigArr[index]-=1 sortIndex+=1 print("已排序集合

    33120发布于 2019-09-10
  • 来自专栏Jed的技术阶梯

    排序

    排序是一种排序的思想,其实现包括计数排序和基数排序两种,冒泡排序、选择排序、插入排序、归并排序、快速排序和堆排序都是基于比较的排序,而排序提出了一种新的思路,即基于数据状态的排序。 1. ,总的来说为O(n) 稳定性:排序是否稳定取决于""用什么数据结构实现,如果是队列,那么可以保证相同的元素"取出去"后的相对位置与"放进来"之前是相同的,即排序是稳定的,而如果用栈来实现"",则排序一定是不稳定的 ,因为排序可以做到稳定,所以排序是稳定的排序算法 3. 排序的实现之计数排序 (1) 计数排序图示过程 找出无序数组的最大值,创建一个长度为最大值+1的空数组 ? 遍历原数组,统计每个元素出现的次数 ? (2) 计数排序Java代码实现 public static void bucketSort(int[] arr) { if (arr == null || arr.length <

    1.1K60发布于 2019-05-09
  • 来自专栏后端知识体系

    排序

    # LeetCode-排序 排序算法回顾 示例1 输入: nums = [4,0,1,2,0,5] 输出: [0,0,1,2,4,5] # 解题思路 排序(Bucket Sort)的原理很简单 是一种非比较的排序方法 在了解排序之前,先了解计数排序 其中计数排序思想如下: 假设待排序的数组a中共有N个整数,并且已知数组a中数据的范围[0, MAX)。 在排序时,创建容量为MAX的数组r,并将数组元素都初始化为0;将容量为MAX的数组中的每一个单元都看作一个""。 在排序时,逐个遍历数组a,将数组a的值,作为"数组r"的下标。 while (bucket[j]-- > 0) { arr[index++] = j; } } } } 排序可以看做是计数排序的扩展 ,在计数排序中,每个只存储相同的元素 而排序中每个存储一定范围的元素,通过映射函数,将待排序数组中的元素存储到各个对应的中 之后对每个中的元素进行排序 最后将非空桶中的元素逐个放入原序列中 排序需要尽量保证元素分散均匀

    27630编辑于 2022-07-14
  • 来自专栏学习

    【数据结构&&计数排序计数排序

    非比较要求输入数据满足一定条件,或者对数据特征进行合理利用 常见的非比较排序算法包括 计数排序 通常适用于范围比较小的整数排序,通过统计每个元素的出现次数,然后将元素按顺序放入数组 排序 将数据放到若干个中 ,随后对每个进行排序,最后再将所有的数据进行合并 基数排序 通过将待排序数值按位数分组,逐位进行排序,通常配合计数排序实现 计数排序 计数排序是一种非比较的排序算法,适用于特定条件下的排序,尤其是当待排序的元素范围较小其重复元素较多的时候 他的基本原理是利用一个额外的数组来记录每一个元素出现的次数,用次数来表达从而达到排序的目的,以下是排序的原理步骤 1.确定范围:首先确定待排序数组的元素的最大值和最小值 2.创建计数数组:根据范围创建一个技术数组 即:若元素为x,则计数数组的第x位置加一。 4.计算位置:通过累加计数数组的数值,得到每个元素在已排序数组中的最终位置。 5.排序输出,根据计数数组生成的已排序数组,遍历计数数组,按次数将对应的元素输出到结果数组中 计数排序的时间复杂度O(n+k),其中n是待排序元素的数量,k是计数数组的大小。

    36810编辑于 2024-12-24
领券