首页
学习
活动
专区
圈层
工具
发布

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

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

82110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Excel按列排序和按行排序

    文章背景:Excel二维表中记录着多行多列的数据,有时需要按行或按列排序,使数据更加清晰、易读。下面分别对按列排序和按行排序进行介绍。...按列排序 视频演示:http://mpvideo.qpic.cn/0bf2kyaamaaazaab47jfqnpvavwdazlaabqa.f10002.mp4?...对于商品编号一列,存在文本型数字,因此,按列排序时会出现排序提醒。 将任意类似数字的内容排序 所有类似数字的文本会以数字大小排序。...按行排序 视频演示:http://mpvideo.qpic.cn/0b78lyaaaaaapuabszbfqjpvaxwdabpaaaaa.f10002.mp4? 本例中,行一代表各个月份。...在进行按行排序时,数据区域不包括A列。在Excel中,没有行标题的概念。因此,排序前如果框中A列的话,A列也将参与排列,会排到12月份之后,而这不是我们想要的结果。

    6.4K10

    排序算法 --- 计数排序

    前面说的那些排序算法,都是要通过比较来实现的。排序还能不通过比较来实现?是的,计数排序就是这么神奇。 一、排序思想 创建一个计数数组,利用数组下标来表示该元素,用数组下标对应的值来表示元素出现的次数。...然后遍历计数数组即可。比如下标为5,元素值为2,表示5出现两次,连续写两次5即可。...这样一来,就将计数排序变成稳定的了。 3....计数排序的缺点: 从上面的分析可以知道,计数排序适合分布比较集中的数据,即最大值和最小值相差不多,如果相差特别多,就会很耗费空间。...对count数组进行变形,让计数排序变成稳定的 for (int i=1; i<count.length; i++) { count[i] += count[i-1];

    1K21

    排序8: 计数排序

    排序思想 2. 图解 3. 代码实现 3.1 逻辑 4. 特性总结 ---- 1. 排序思想 计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用。 操作步骤: 1....我们统计完所有数字出现的次数之后,根据次数将数字填入到原数组中,就完成了排序。 这种数字对应下标的叫做绝对映射。...b、计数:然后开始重新遍历一遍计数,我们遍历一遍原数组,每次取到的数字就是新开辟的数组的下标,这里因为我们为了取到相对位置,需要将取到的数组减去 min 我们++即可。...c、排序(将统计好的数字放到数组):我们遍历一遍排好的数组,次数大于1的数字(这里取到的数字需要重新加上min)按次数放到原数组中。...计数排序在数据范围集中时,效率很高,但是适用范围及场景有限。 2. 时间复杂度: O(MAX(N, 范围 )) 3.

    59720

    计数排序

    计数排序和原来说过的几个排序算法有一个特别大的不同之处:它是一个不基于比较的排序算法。不管是快排,归并,还是堆排,它们都难以突破NlogN的运行时间下限,而计数排序是一个线性时间级别的排序算法。...对NlogN的突破凭借的就是不基于比较对元素进行排序,当然了,它也有很大的局限性,比如它只能对整数进行排序。总之,计数排序是一种对整数进行排序非常有效的排序算法。...计数排序的思想就是记录每个元素出现的次数,通过数组下标确定每个元素的先后关系。比如对数组A{2,5,6,8,4,2,5,4,8,6}进行排序 找出最大元素2和最小元素8,确定元素范围。...我们通过这些频率信息可以计算出每个元素在排序之后在数组中的所在位置,首先我们进行这样一步 for (int i=0;i<BLength-1;i++){ B[i+1] +=B[i]...下面给出完整代码: public class CountSort { public static void sort(int[] A){ System.out.println("开始计数排序

    1.2K30

    计数排序

    计数排序是典型排序算法之一,今天就来介绍一下计数排序,并通过LeetCode的1365题进行python实例演示。...1 概念 通常的排序算法是要进行元素之间的比较,而计数排序是记录下每个元素出现的个数,是一种空间换时间的排序方法。适合整数数组排序,并且不同元素个数不宜过多。...(图片来自网络) 2 python实例展示 题目1365:有多少小于当前数字的数字 给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。 ?...思路一:计数排序 建立中间数组记录每个值出现的次数,因为最后要输出的是小于某元素的所有数字个数,因此最后一步不是之间遍历输出,而是要把前面的出现次数相加。...result.append(sum(count_sort[0:nums[i]-min_num+1])) return(result) 思路二:哈希表 首先把nums进行排序

    1.3K20

    【排序算法】—— 计数排序

    一、简介         计数排序,顾名思义就是记录数据出现的次数进行排序,时间复杂度为O(N+K),空间复杂度为O(N)。只能用于整型,对于比较集中重复率比较高数据更为适用。...tmp初始化为0,然后进行计数,比如第一个数字为1那么就在1下标位置加1,以此类推遍历完数组arr。...for (int i = 0, j = 0; i < ret; i++) { while (tmp[i]--) arr[j++] = i + min; } } 三、适用范围         计数排序的缺点就是只能对整型数据进行排序...,不能对字符,浮点形还有结构体类型进行排序。...而且对于整形的排序他更适合的是最小值和最大值跨度比较小的数据,或者重复率比较高的数据。比如10个整数最小的是1最大的那个是100万。使用计数排序就会导致空间的开销很大,效率也比较低。

    23110

    【排序算法】—— 计数排序

    排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。 简介         所谓排序算法,即通过特定的算法因式将一组或多组数据按照既定模式进行重新排序。...本篇文章将为大家介绍一种比较特殊的排序算法,它就是计数排序。...因此我们不能按数值来开辟空间,而是要按范围来开辟空间,那么如何按范围来开辟空间呢?...虽然我们按范围开空间能够节省一部分空间,但是当最大值与最小值差距过大时用计数排序是很浪费空间的,因此计数排序只有在数据范围集中时,效率才会很高,适用范围及场景有限。...由于计数排序是非交换排序,在整个排序过程中不涉及到交换操作,因此我们认为计数排序是稳定的。

    31010

    算法渣-排序-计数排序

    没有一身好内功,招式再多都是空;算法绝对是防身必备,面试时更是不可或缺;跟着算法渣一起从零学算法 线性排序 常见的三种以线性时间运行的算法:计数排序、基数排序和桶排序 需要注意的是线性排序算法是非基于比较的排序算法...,都有使用限制才能达到线性排序的效果 线性排序是个神奇的算法,比基数排序及桶排序神奇得多 定义 计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H....,新数组元素就是位置号) 语言比较空洞,直接来个示例(转自小灰程序员) 将数组arr中的数据当作是学生的成绩,要求不但要按照顺序从低到高排序,成绩相同时,按原有顺序显示: ?...这样一来,同样是95分的小红和小绿就能够清楚地排出顺序了,也正因此,优化版本的计数排序属于稳定排序。...引申阅读 算法渣-排序-基数排序 算法渣-排序-桶排序 参考资料 漫画:什么是计数排序

    73320

    排序算法(八):计数排序

    计数排序是一种非比较性质的排序算法,元素从未排序状态变为已排序状态的过程,是由额外空间的辅助和元素本身的值决定的。...计数排序过程中不存在元素之间的比较和交换操作,根据元素本身的值,将每个元素出现的次数记录到辅助空间后,通过对辅助空间内数据的计算,即可确定每一个元素最终的位置。...所有元素的出现次数和元素值记录如下,其中 表示该元素出现的次数, 表示元素值: 可以发现,计数排序的该过程,其实就是将待排序集合中的每个元素值本身大小作为下标,依次进行了存放。...算法分析 由算法示例可知,计数排序的时间复杂度为 。因为算法过程中需要申请一个额外空间和一个与待排序集合大小相同的已排序空间,所以空间复杂度为 。...由此可知,计数排序只适用于元素值较为集中的情况,若集合中存在最大最小元素值相差甚远的情况,则计数排序开销较大、性能较差。

    76020

    计数排序详解

    一、什么是计数排序? 计数排序(CountSort)是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。...计数排序的基本思想是对于给定的输入序列中的每一个元素x,确定该序列中值小于x的元素的个数(此处并非比较各元素的大小,而是通过对元素值的计数和计数值的累加来确定)。...实际上,计数排序是将待排序数组的值对应新数组的下标,新数组首先全部初始化为0,只要遇到待排序元素与新数组下标相等便+1,最终在将新数组中的数据按顺序存回原来的数组,这样数组中的元素就有序了。...假如有一组数据的范围为101~199范围内的数据,这个时候用计数排序难道还要从0开始创建新的数组吗?...这样计数排序就完成了。

    1.8K10

    非比较排序-计数排序

    1.计数排序 前面学习了归并排序,快速排序时间复杂度为O(n*logn)而有没有比这更快的排序算法呢?...当然是有的那就是计数排序,首先计数排序并不是比较排序算法,而是利用数组来实现的一种算法,想象一下这样一个场景,假如给数组{1,4,5,1,3}做一个排序,我们可以看出其中最大的值就是5,但是怎么利用数组实现排序呢...我们知道数组是一组连续的地址空间,且可以通过下标进行随机访问,数组有下标是有序的,我们可以利用下标来实现排序。...虽然上面代码实现了排序,但是存在很多问题。 1.如果要排序的数组是这样的数组{90,93,92,92,95},难道我们还是要根据最大值为95开一个长度为96的计数数组吗?...3.计数排序怎么实现稳定排序呢?

    88961

    ——非比较排序—计数排序

    该篇文章 所涉及代码收录仓库:登录 - Gitee.com 1.非比较排序——计数排序 思想:计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用。 2.最终实现 1.解析 操作步骤: 1....: 非比较排序算法:计数排序不通过元素间的直接比较来进行排序,而是通过计算元素的分布情况来确定它们的位置,这使得它在最好、最坏和平均情况下都有较好的性能表现。...时间复杂度:计数排序的时间复杂度为O(n+k),其中n是数组长度,k是数组中数据范围(最大值与最小值之差加一)。当k不是很大且远小于n时,计数排序非常高效。...空间复杂度:计数排序需要额外的计数数组,其空间复杂度为O(k),这使得它在处理大数据范围时可能比较消耗内存。 稳定性:计数排序是一种稳定的排序算法。...综上,计数排序在特定场景下(如数据范围不大、整数类型)是一种快速且高效的排序选择,但其适用场景相对有限,且空间效率较低。

    56510

    排序算法指南:计数排序

    前言: 计数排序(Counting Sort)是一种非比较型的排序算法,它的核心思想是利用数组来存储输入数据中每个元素的出现次数,然后根据这些统计信息来确定输出序列。...一、计数排序的原理 计数排序适用于整数数据,且这些整数的范围不宜过大,它的基本步骤如下: ①找出范围:确定输入数组中最大值(max)和最小值(min),从而确定数据的范围range:max-min+1...②创建计数数组:创建一个长度为 range 的计数数组 count,用于存储输入数组 a 中每个元素的出现次数。...2,0,0,0,1,1,0,0,2] 温馨提示:由于偏移量的问题,所以在C数组对应的索引需要进行加上偏移量后输出到结果数组 例如: count[0] = 2, 表示的是 a[i]-offset 出现了2次 二、计数排序的工作流程...i = 0; i < range; i++) { while (count[i]--) { a[j++] = i + min; } } } 四、复杂度分析 4.1时间复杂度 计数排序主要分

    35910

    【图解数据结构】 一组动画彻底理解计数排序

    本系列包括十大排序、堆、队列、树、并查集、图等等大概几十篇。 计数排序 计数排序是一种非基于比较的排序算法,其空间复杂度和时间复杂度均为O(n+k),其中k是整数的范围。...基于比较的排序算法时间复杂度最小是O(nlogn)的。该算法于1954年由 Harold H. Seward 提出。 计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。...作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。...排序动画过程解释 首先,扫描一下整个序列 获得最小值为 2 ,最大值为 7 新建数组包含 2~7 的元素 再次扫描序列,将序列的值放置在新建数组中 扫描数字 5,数组中 index 为 3 的值为 5,

    1K30
    领券