前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >计数排序

计数排序

作者头像
attack
发布于 2018-04-12 06:56:16
发布于 2018-04-12 06:56:16
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

算法思想

编辑

计数排序对输入的数据有附加的限制条件:

1、输入的线性表的元素属于有限偏序集S;

2、设输入的线性表的长度为n,|S|=k(表示集合S中元素的总数目为k),则k=O(n)。

在这两个条件下,计数排序的复杂性为O(n)。

计数排序的基本思想是对于给定的输入序列中的每一个元素x,确定该序列中值小于x的元素的个数(此处并非比较各元素的大小,而是通过对元素值的计数和计数值的累加来确定)。一旦有了这个信息,就可以将x直接存放到最终的输出序列的正确位置上。例如,如果输入序列中只有17个元素的值小于x的值,则x可以直接存放在输出序列的第18个位置上。当然,如果有多个元素具有相同的值时,我们不能将这些元素放在输出序列的同一个位置上,因此,上述方案还要作适当的修改。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 #include <iostream>
 2 using namespace std;
 3 const int k=1000; // range
 4 int a[1000],c[1000],ranked[1000];
 5 int maxn=-1;
 6 int main() 
 7 {
 8     
 9     int n;
10     cin>>n;
11     for (int i=0;i<n;i++) 
12     {
13         cin>>a[i]; 
14         c[a[i]]++;
15         if(a[i]>maxn)
16         maxn=a[i];
17     }
18     for (int i=1;i<=maxn;i++)
19         c[i]=c[i-1]+c[i];
20     for (int i=0;i<=n-1;i++)
21     {
22         ranked[--c[a[i]]]=a[i];//--是为了方便输出相同的数 
23        
24     for (int i=0;i<n;i++)
25         cout<<ranked[i]<<endl;
26     return 0;
27 }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-03-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
计数排序详解
计数排序(CountSort)是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。当然这是一种牺牲空间换取时间的做法,而且当O(k)>O(n*log(n))的时候其效率反而不如基于比较的排序(基于比较的排序的时间复杂度在理论上的下限是O(n*log(n)), 如归并排序,堆排序) ————百度百科
用户11029129
2024/06/04
1160
计数排序详解
算法渣-排序-计数排序
需要注意的是线性排序算法是非基于比较的排序算法,都有使用限制才能达到线性排序的效果
码农戏码
2021/03/23
3880
计数排序
计数排序属于非比较排序算法类,故其时间复杂度不受比较排序算法时间复杂度下界的限制,可以达到 。其中, 为待排序序列的排序关键字的最大范围。 计数排序是稳定的、非原址的。
hotarugali
2022/03/01
2K0
【数据结构&&计数排序】计数排序
非比较排序是一种排序算法,它不是通过比较元素大小进行排序的,而是基于元素的特征和属性排序。这种排序方法在特定情况下,可以做到比元素比较排序(快排,归并)更有效率。尤其是在处理大量数据时。非比较要求输入数据满足一定条件,或者对数据特征进行合理利用
用户11367452
2024/12/24
1020
【数据结构&&计数排序】计数排序
极客算法训练笔记(十),十大经典排序之计数排序、基数排序
终于来到了最后两个算法,非比较类的线性时间复杂度算法,计数排序和基数排序。上一篇也提到过,这几种排序算法理解起来都不难,时间、空间复杂度分析起来也很简单,但是对要排序的数据要求很苛刻,上一篇提到的桶排序就是适用于外部排序中,即所谓的外部排序就是数据存储在外部磁盘中,数据量比较大,内存有限,无法将数据全部加载到内存中。
阿甘的码路
2021/01/03
4390
极客算法训练笔记(十),十大经典排序之计数排序、基数排序
【数据结构】排序算法系列——计数排序(附源码+图解)
对每一个输入元素 x, 确定小于 x 的元素个数。利用这一信息,就可以直接把 x 放到它在输出数组中的位置上了。例如,如果有 17 个元素小于 x , 则 x 就应该在第18个输出位置上。当有几个元素相同时,这一方案要略做修改。因为不能把它们放在同一个输出位置上。
Skrrapper
2024/09/29
2500
【数据结构】排序算法系列——计数排序(附源码+图解)
❤️十大排序算法详解❤️——可能是你看过最全的,完整版代码
兄弟们,应上篇数据结构的各位要求,今天我开始工作了,开始肝算法,剑指offer还在路上,我真想开车去接它,奈何码神没有驾照的开车,算了,弄排序算法吧,有点长,耐心看啊,原创不易,你们懂的,先上一张图
秋名山码神
2022/12/13
3630
❤️十大排序算法详解❤️——可能是你看过最全的,完整版代码
C语言 | 动图演示十大经典排序算法(含代码)
插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
混说Linux
2023/02/24
7440
C语言 | 动图演示十大经典排序算法(含代码)
算法05-排序算法
本系列为C++算法学习系列,会介绍 算法概念与描述,入门算法,基础算法,数值处理算法,排序算法,搜索算法,图论算法, 动态规划等相关内容。本文为排序部分。
用户2225445
2023/10/16
3210
算法05-排序算法
【数据结构与算法】详解计数排序:小范围整数排序的最佳选择
首先,代码通过遍历待排序数组 a,找出其中的最大值 max 和最小值 min。这两个值用于确定计数数组 count 的大小,因为计数数组需要覆盖待排序数组中所有可能出现的值(在最小值和最大值之间)。
倔强的石头
2024/12/06
1470
【数据结构与算法】详解计数排序:小范围整数排序的最佳选择
[数据结构]——非比较排序—计数排序
综上,计数排序在特定场景下(如数据范围不大、整数类型)是一种快速且高效的排序选择,但其适用场景相对有限,且空间效率较低。
小李很执着
2024/06/15
1120
[数据结构]——非比较排序—计数排序
十大经典排序算法详解(三)-堆排序,计数排序,桶排序,基数排序
这是十大经典排序算法详解的最后一篇了. 还没有看多之前两篇文章的小伙伴可以先去看看之前的两篇文章:
萌萌哒的瓤瓤
2021/02/02
6070
十大经典排序算法详解(三)-堆排序,计数排序,桶排序,基数排序
计数排序(Counting Sort)详解
计数排序(Counting Sort)是一种非比较排序算法,其核心思想是通过计数每个元素的出现次数来进行排序,适用于整数或有限范围内的非负整数排序。这个算法的特点是速度快且稳定,适用于某些特定场景。在本文中,我们将深入探讨计数排序的原理、步骤以及性能分析。
修己xj
2023/10/05
4120
计数排序(Counting Sort)详解
【数据结构与算法】十大经典排序算法深度解析:冒泡排序、选择排序、插入排序、归并排序、快速排序、希尔排序、堆排序、计数排序、桶排序、基数排序
这个序列是逐渐减小的,gap的值较大时,数据可以更快的前后变动,但不容易"基本有序";gap较小时数据前后变动较慢,但更接近"基本有序"。 通常可以选取gap = n/3, gap = gap/3, ...,直到gap= 1。
倔强的石头
2024/12/06
7820
【数据结构与算法】十大经典排序算法深度解析:冒泡排序、选择排序、插入排序、归并排序、快速排序、希尔排序、堆排序、计数排序、桶排序、基数排序
常用排序算法总结(2)
来源:SteveWang http://www.cnblogs.com/eniac12/p/5332117.html 上一篇总结了常用的比较排序算法,主要有冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。 这篇文章中我们来探讨一下常用的非比较排序算法:计数排序,基数排序,桶排序。在一定条件下,它们的时间复杂度可以达到O(n)。 这里我们用到的唯一数据结构就是数组,当然我们也可以利用链表来实现下述算法。 计数排序(Counting Sort) 计数排序用到一个额外的计数数组C,根据数组C来将原数
朱晓霞
2018/07/20
3930
十种常见排序算法
十种常见排序算法一般分为以下几种: (1)非线性时间比较类排序:交换类排序(快速排序和冒泡排序)、插入类排序(简单插入排序和希尔排序)、选择类排序(简单选择排序和堆排序)、归并排序(二路归并排序和多路归并排序);
恋喵大鲤鱼
2018/08/03
1.1K0
十种常见排序算法
排序算法——一篇文章搞懂常用的排序算法
排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。 内部排序:数据元素全部放在内存中的排序。 外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序
海盗船长
2020/08/27
4200
排序算法——一篇文章搞懂常用的排序算法
百万考生分数如何排序 - 计数排序
其实计数排序是桶排序的一种特殊情况。 桶排序的核心思想是将要排序的数据分到几个有序的桶里,每个桶里的数据再单独进行排序。桶内排完序之后,再把每个桶里的数据按照顺序依次取出,组成的序列就是有序的了。
码哥字节
2020/07/14
1.2K0
百万考生分数如何排序 - 计数排序
C#计数排序算法
计数排序(Counting Sort)是一种非比较型整数排序算法,其核心在于将输入的数字映射到数组索引上。与传统排序算法相比,计数排序在处理特定类型的数据时(如整数或小范围的值)具有非常高的效率。该算法的时间复杂度通常为O(n + k),其中n是待排序数组中的元素数量,k是数组中最大和最小元素的差值。
Michel_Rolle
2024/10/10
2.5K0
常用的排序算法之计数排序(Counting Sort)
计数排序(Counting Sort)的起源并不明确指向某一个特定的发明者或时间点,但它作为一种简单直观的排序算法,在计算机科学中得到了广泛的应用。计数排序的基本思想是通过统计数组中每个元素出现的次数,来确定其在排序后数组中的位置。
jack.yang
2025/04/05
850
推荐阅读
相关推荐
计数排序详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验