int count_sort(int *A, int n, int k){
int B[n];
int C[k+1];
for(int i = 0; i < k+1; i++) //initialize C[i]: A的每个值有0个
C[i] = 0;
for(int i = 0; i < n; i++){ //将A的每个值的出现频率存储在C[i]中,i为A的值
int j = A[i];
C[j] = C[j]+1;
}
for(int i = 1; i < k+1; i++) //C[i]中为A中<=i的值的个数
C[i] = C[i] + C[i-1];
for(int i = 0; i < n; i++){
B[C[A[i]]-1] = A[i]; //B[<=i的值的个数] = i
C[A[i]] = C[A[i]]-1; // C[i]中<=i的值得个数减1
}
for(int i = 0; i < n; i++)
cout<<"B["<<i<<"] = "<<B[i]<<endl;
return 0;
}
int test(void){
int A[] = {4,1,3,2,16,9,10,14,8,7};
int n = sizeof(A)/ sizeof(int);
count_sort(A, n, 16);
return 0;
}
线性时间排序-counting_sort
最新推荐文章于 2023-11-17 18:06:54 发布