计数排序的基本思想就是对每一个输入元素x,确定出小于x的元素个数
for循环如果用注释的内容也是可以的,只不过不用注释的for循环保证具有相同值的元素在输出数组中的相对次序与它们在输入数组中的次序相同
#include<iostream> using namespace std; void counting_sort(int *A,int *B,int *C,int k,int size){ int j; //C[j]为<=j的数的个数 for(int i=0;i<=k;i++) C[i]=0; for(j=0;j<size;j++) C[A[j]]++; for(j=1;j<=k;j++) C[j]+=C[j-1]; for(j=size-1;j>=0;j--){ B[C[A[j]]-1]=A[j]; C[A[j]]--; } // for(j=0;j<size;j++){ // B[C[A[j]]-1]=A[j]; // C[A[j]]--; // } } int main(){ int A[]={2,5,3,0,2,3,0,3}; int A1[]={2,8,3,4,2,3,1,3}; int B[8]; int C[6]; int C1[9]; counting_sort(A,B,C,5,8); for(int i=0;i<8;i++) cout<<B[i]<<" "; cout<<endl; counting_sort(A1,B,C1,8,8); for(int i=0;i<8;i++) cout<<B[i]<<" "; return 0; }