计数排序的思想,是对于每一个输入,确定出小于该输入的元素的个数。
/**---------------------------------
houyong
------------------------------------*/
#include <iostream>
#include <ctime>
#include <stdlib.h>
using namespace std;
/**
* 计数排序的思想,是对于每一个输入的A[i],确定出小于A[i]的元素个数。
* 它有一个假定条件,那就是数组中的数是介于0到k之间的整数
* A[]为待排序数组
* n为数组A[]的大小
* B[]为排序后的结果
* 程序中还会用到一个辅助数组C[],大小为k
*
*/
void Counting_Sort(int A[], int B[], int n)
{
int *C = new int[100]; //这里假定A[]中数字全部介于0-100
for(int i=0; i<100; i++)
C[i] = 0;
for(int i=0; i<n; i++)
C[A[i]] = C[A[i]] + 1;
for(int i=1; i<100; i++)
C[i] = C[i] + C[i-1];
for(int i=n-1; i>=0; i--)
{
B[C[A[i]]-1] = A[i];
C[A[i]] = C[A[i]] - 1;
}
delete[] C;
}
int main()
{
int A[10]; //待排序数组
int B[10]; //存放结果
srand(time(0));
for(int i=0; i<10; i++) //随机产生0-100的10个数
A[i] = 0 + rand()%(100 - 0);
for(int i=0; i<10; i++) //打印排序前的数组A[]
cout<<A[i]<<" ";
cout<<endl;
Counting_Sort(A, B, 10); //k=100
for(int i=0; i<10; i++) //打印排序后的数组B[]
cout<<B[i]<<" ";
cout<<endl;
return 0;
}
/**
4 79 25 81 98 51 38 67 33 48
4 25 33 38 48 51 67 79 81 98
*/