排序算法——基数排序
来源:互联网 发布:mac 切换java版本 编辑:程序博客网 时间:2024/04/28 23:16
基数排序(Radix sort)是一种排序算法,它是这样实现的:
将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零. 然后, 从最低位开始, 依次进行一次排序.这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列.
基数排序时间复杂度: O(d(n+k)) n个d位数,每个数位有k种取值
- #include <stdio.h>
- #include <stdlib.h>
- int max_bit(int a[], int size) /* get the max bit of number */
- {
- int i, max, b;
- for (i = 1, max = a[0]; i < size; i++) {
- if (a[i] > max) {
- max = a[i];
- }
- }
- b = 1;
- while (max / 10) {
- b++;
- max /= 10;
- }
- return b;
- }
- void radix_sort(int a[], int size)
- {
- int d = max_bit(a, size);
- int i, j, k, range, radix;
- int *c, *b;
- range = 10; /* for counting sort, the range of every bit is 0 - 9 */
- radix = 1;
- c = (int *)malloc(sizeof(int) * range);
- b = (int *)malloc(sizeof(int) * size);
- for (i = 0; i < d; i++, radix *= 10) {
- /* use counting sort */
- /* clear count before every sort */
- for (j = 0; j < range; j++) {
- c[j] = 0;
- }
- /* c[k] content the num of elements which equal to k */
- for (j = 0; j < size; j++) {
- k = (a[j] / radix) % 10;
- c[k]++;
- }
- /* c[j] content the num of elements which equal or less than j */
- for (j = 1; j < range; j++)
- c[j] += c[j-1];
- /* put a[j] into the space of b[c[k] - 1] */
- for (j = size - 1; j >= 0; j--) {
- k = (a[j] / radix) % 10;
- b[c[k] - 1] = a[j];
- c[k]--;
- }
- /* copy the 'sorted' list to a[j] */
- for (j = 0; j < size; j++)
- a[j] = b[j];
- }
- free(c);
- free(b);
- }
- main()
- {
- int a[] = {329, 457, 657, 839, 436, 720, 355}, i;
- int size = sizeof(a) / sizeof(int);
- radix_sort(a, size);
- for (i = 0; i < size; i++)
- printf("%d ", a[i]);
- }
- 排序算法——基数排序
- 排序算法——基数排序
- 排序算法——基数排序
- 排序算法——基数排序
- 经典排序算法之——基数排序
- 算法——排序之基数排序
- 排序算法(八)——基数排序
- 排序算法系列——基数排序
- 八大排序算法详解——基数排序
- 排序算法(6)——基数排序
- 排序算法(八)——基数排序
- 排序算法(八)——基数排序
- 排序算法总结(4)——归并排序、基数排序
- 排序算法——基数排序(桶式排序)
- 【继续思考】排序算法——基数排序与桶排序
- 常用排序算法——基数排序(桶排序)
- 经典排序算法(10)——基数排序算法详解
- 排序——基数排序
- 笔试之SCJP(1)
- [转]CString类型的头文件、CString的输出、CString的常用用法
- LoadRunner协议选择
- 笔试之SCJP(2)
- Java中的同步和异步区别
- 排序算法——基数排序
- Oracle时间日期操作
- 自己动手编译了一个内核的测试模块
- jsp乱码解决大全(转)
- Android平台WindowManager
- 新手加入
- OgnlException
- 数据结构-C++描述:时间复杂性
- C++ Templates:trait与policy类