(1)计数排序的原理十分简单,但也有所限制,即定义额外的一个数组num1[],遍历要排序数组num2[],对应num1[num2[]]++
(2)再将数据赋值回去即可
(3)当数字范围小,且集中时,计数排序十分好用
//计数排序
//{1,2,4,3,8,5,4,2,6,4,6,4}
//简单且理想,数字范围1到10,很小且集中
//对以上数据进行排序
#include
using namespace std;
int main()
{
int num[11]={0};
int num2[12]={1,2,4,3,8,5,4,2,6,4,6,4};
for(int i=0;i<12;i++)
{
num[num2[i]]++;
}
int j=0;
for(int i=0;i<11;i++)
{
while(num[i]--)
{
num2[j++]=i;
}
}
for(int i=0;i<12;i++)
{
cout<
以上是比较理想的情况,如果数字跨度范围大,且分散,就耗费时间和空间了,可以了解一下基本的思想
二:基数排序
排序原理
(1)基数排序听起来像计数排序一样,其实不然,但也有共通之处
(2)基数排序是依次对数的个位,十位,百位…进行排序,左后得到的一的有序序列
代码实现
//基数排序
//{45,45,26,64,64,987,56,2,1,356,45,1}
#include
#include
using namespace std;
int main()
{
int num1[12]= {45,45,26,64,64,987,56,2,1,356,45,1}; //待排序数组
int num2[10][12]= {0};
int ii;
int count=0;
for(int j=0; j<3; j++)
{
int num[10]= {0};
for(int i=0; i<12; i++)
{
ii=num1[i]/(int)pow(10,j)%10;
num2[ii][num[ii]++]=num1[i];
}
for(int k=0; k<11; k++)
{
int flag=0;
while(num[k]--)
{
num1[count++]=num2[k][flag++];
}
}
count=0;
}
for(int i=0; i<12; i++)
{
cout<
上面代码仅仅演示了基数排序和计数排序的基本原理,不具有代码通用性



