计数排序
来源:互联网 发布:如何关掉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
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 浅谈UML中的聚合与组合
- svn重设日志内容 及 如何修改SVN已提交项目的message log
- 通俗的去理解 wait()和notify()
- 关于background【有更新已解决】
- 结构上的算法----数组
- 计数排序
- java.lang.OutOfMemoryError 解决方法
- 讨论-router与switch区别
- memcpy函数
- jQuery 选择器大全(精)
- RT-Thread操作系统之—开发工具
- Objective-C Operation Queues
- IOS8 Playground介绍
- 避免构造/析构函数调用虚函数