特点:
1.通过计数而不是比较来进行排序
2.适用于范围较小的整数序列排序
题目:
小名是一位一年级小学生今天老师留的作业是将4,2,2,3,3,4,2,1,0,1这十个数进行排序
请你写一个c++程序帮帮明。
提示:
计数排序因为计数排序适用于范围较小的整数序列排序并且适用于有重叠数字的整数序列
输入:
无
输出:
排好序的十个数
样例输入:
无
样例输出:
0 1 1 2 2 2 3 3 4 4
源代码及注释:
#include<iostream>
using namespace std;
int a[]={4,2,2,3,3,4,2,1,0,1};//这是老师交给小明要小明排序的数组
int cnt[5];//因为数组的范围是从0—4所以要建立5个数组空间
int main()// 主函数
{
for(int i=0;i<10;i++)//开始计数每个数是 a[i] 那么数组出现的次数就是cnt[a[1]]
{
cnt[a[i]]++;// 如果有一个数字出现2次那么计数器就会加1
}
for(int i=0;i<5;i++)
{
for(int j=0;j<cnt[i];j++)//第一遍循环看数字0在数组中出现了多少次 ,// 第二遍循环看数字1在数组中出现了多少次 以此类推
{
cout<<i<<" ";// 如果有就输出
}
}
return 0;
}
排序过程;
假设输入的线性表L的长度为n,L=L1,L2,..,Ln;线性表的元素属于有限偏序集S,|S|=k且k=O(n),S={S1,S2,..Sk};则计数排序可以描述如下:
1、扫描整个集合S,对每一个Si∈S,找到在线性表L中小于等于Si的元素的个数T(Si);
2、扫描整个线性表L,对L中的每一个元素Li,将Li放在输出线性表的第T(Li)个位置上,并将T(Li)减1。
动态图: