计数排序

来源:互联网 发布:如何关掉mysql服务 编辑:程序博客网 时间:2024/05/20 13:39
void CountingSort(int *A, int *B, int n, int k){int *C = (int *)malloc((k + 1) * sizeof(int));if (!C) {printf("C malloc error!\n");return ;}// 初始化数组Cfor (int i = 0; i <= k; i++)C[i] = 0;// 记录每个元素的个数for (int j = 0; j < n; j++)C[A[j]]++; // 累计计数for (int i = 1; i <= k; i++) C[i] = C[i] + C[i-1];// 将A中元素映射到B中for (int j = n - 1; j >= 0; j--) {B[C[A[j]]-1] = A[j];C[A[j]] = C[A[j]] - 1;}free(C);}

void StableSort(int *A, int size, int radix, int d) // digit{int *C = (int *)malloc(radix * sizeof(int));if (!C) {printf("C malloc error\n");return ;}int *B = (int *)malloc(size * sizeof(int));if (!B) {printf("B malloc error\n");return ;}int *D = (int *)malloc(size * sizeof(int));if (!D) {printf("D malloc error\n");return ;}// 初始化数组Cfor (int i = 0; i < radix; i++)C[i] = 0;int val = 1;while (--d) val *= 10;// 记录每个元素的个数for (int j = 0; j < size; j++) {D[j] = A[j] / val % 10;C[D[j]]++; }// 累计计数for (int i = 1; i < radix; i++) C[i] = C[i] + C[i-1];// 将A中元素映射到B中for (int j = size - 1; j >= 0; j--) {B[C[D[j]]-1] = A[j];C[D[j]]--;}for (int i = 0; i < size; i++)A[i] = B[i];free(C);free(B); free(D);}void RadixSort(int *A, int size, int radix, int d){for (int i = 1; i <= d; i++) {StableSort(A, size, radix, i);}}


 

0 0