您的位置:首页 > 其它

线性时间排序-counting_sort

2015-06-06 21:33 344 查看
int count_sort(int *A, int n, int k){
int B
;
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: