您的位置:首页 > 其它

radix-sort基数排序 内部排序用count-sort

2015-06-07 20:43 369 查看
int radix_count_sort(int *A, int *d, int n){   //inner: count-sort
int temp
;
int k = 10;
int Counter[k];
int i = 0, j = 0;

for(i = 0; i < k; i++)
Counter[i] = 0;
for(i = 0; i < n; i++){
j = d[i];
Counter[j] = Counter[j]+1;
}
for(i = 1; i < k; i++)
Counter[i] = Counter[i] + Counter[i-1];
for(i = n-1; i >= 0; i--){                 //stable, count in reverse-way
temp[ Counter[d[i]] - 1 ] = A[i];
Counter[d[i]] = Counter[d[i]]-1;
}
for(i = 0; i < n; i++)
A[i] = temp[i];

return 0;
}


int radix_sort(int *A, int n){    //radix = 10
int d1
,d2
,d3
;

for(int i = 0; i < n; i++)       //低位起排
d1[i] = A[i]%10;
radix_count_sort(A, d1, n);

for(int i = 0; i < n; i++)
d2[i] = (A[i]/10)%10;
radix_count_sort(A, d2, n);

for(int i = 0; i < n; i++)     //最后排高位
d3[i] = A[i]/100;
radix_count_sort(A, d3, n);

for(int i = 0; i < n; i++)    //输出排好序列
cout<<A[i]<<endl;

return 0;
}


int test(void){
int A[] = {14,115,329,122,716,491,210,114,861,277};
int n = sizeof(A)/ sizeof(int);
radix_sort(A, n);
return 0;
}


结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: