/*
计数排序就是在n个数(均小于某一个值k)利用k来进行排序,
不涉及到元素之间的比较
*/
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>
#define NUMBER 1000 //数组中元素的范围
#define ARRAYLENGTH 1000
using namespace std;
void countingSort(const int *,int *,int);
void print(int *);
int main()
{
srand(unsigned(time(NULL)));
int countingArray[ARRAYLENGTH+1] = {0};
int sortedArray[ARRAYLENGTH+1] = {0};
for(int i=1;i<=ARRAYLENGTH;i++)
countingArray[i] = rand()%(NUMBER+1);
cout << "before countingSort:" << endl;
print(countingArray);
countingSort(countingArray,sortedArray,ARRAYLENGTH);
cout << "after countingSort:" << endl;
print(sortedArray);
system("pause >> cout");
return 0;
}
//数组A是从1到length,数组B是用来存放排好序之后的数组
void countingSort(const int *A,int *B,int length)
{
int C[NUMBER+1];
int i;
for(i=0;i<=NUMBER;i++)
C[i] = 0;
for(i=1;i<=length;i++)
C[A[i]] = C[A[i]] + 1;//统计每“种”元素的个数
for(i=1;i<=NUMBER;i++)
C[i] = C[i] + C[i-1];//统计小于等于k的元素个数,
//排序操作
for(i=length;i>0;i--)
{
B[C[A[i]]] = A[i];//C[A[m]]就是元素A[m]在排好序的数组中的位置
C[A[i]] = C[A[i]] - 1;
}
}
void print(int *temp)
{
for(int i=1;i<=ARRAYLENGTH;i++)
{
cout << setw(4) << temp[i];
if(i%10==0)
cout << endl;
}
}
计数排序
最新推荐文章于 2024-11-16 14:38:00 发布