排序【8】之基数排序的C语言实现
2018-01-20 15:10
295 查看
基数排序(Radix Sorting)是一种借助多关键字排序的思想对单逻辑关键字进行关系的方法。基数排序不需要进行记录关键字间的比较。
主要分为两个过程:
(1)分配,先从个位开始,根据位值(0-9)分别放到0~9号桶中(比如53,个位为3,则放入3号桶中)
(2)收集,再将放置在0~9号桶中的数据按顺序放到数组中
基数排序的特点:
稳 定 性:稳定
时间复杂度:O(kn)(k表示整形的最高位)
空间复杂度:O(10n)
举例排序过程:
对 23, 12, 15, 108, 4,5 进行基数排序
1、对个位进行排序
12,23,4,5,15,108
2、对十位进行排序
108,4,5,12,15,23
3、对百位进行排序
4,5,12,15,23, 108
代码:
主要分为两个过程:
(1)分配,先从个位开始,根据位值(0-9)分别放到0~9号桶中(比如53,个位为3,则放入3号桶中)
(2)收集,再将放置在0~9号桶中的数据按顺序放到数组中
基数排序的特点:
稳 定 性:稳定
时间复杂度:O(kn)(k表示整形的最高位)
空间复杂度:O(10n)
举例排序过程:
对 23, 12, 15, 108, 4,5 进行基数排序
1、对个位进行排序
12,23,4,5,15,108
2、对十位进行排序
108,4,5,12,15,23
3、对百位进行排序
4,5,12,15,23, 108
代码:
#include <stdio.h> #include <stdlib.h> void RadixCountSort(int *index,int *a,int len) { int i; int *count=(int *)malloc(sizeof(int)*10); for(i=0;i<10;i++) { count[i]=0; } for(i=0;i<len;i++) { count[index[i]] ++; } for(i=1;i<10;i++) { count[i]=count[i] + count[i - 1]; } int *sort=(int *)malloc(sizeof(int)*len); for(i=len-1;i>=0;i--) { count[index[i]] --; sort[count[index[i]]] = a[i]; } for(i=0;i<len;i++) { a[i]=sort[i]; } free(sort); free(count); } void RadixSort(int *a,int len) { int i , x=1; int tmp=1; int *radix=(int *)malloc(sizeof(int)*len); while(x) { tmp=tmp * 10; x=0; for(i=0;i<len;i++) { radix[i]=a[i] % tmp; radix[i]=radix[i] / (tmp / 10); if(a[i] / tmp > 0) { x = 1; } } RadixCountSort(radix,a,len); } free(radix); } int main() { int i,len; int a[]={100, 8 , 1099, 6, 1, 300, 405, 604, 102, 806, 706, 504}; len =sizeof(a) / sizeof(int); RadixSort(a,len); for(i=0;i<len;i++) { printf("%d ",a[i]); } printf("\n"); return 0; }
相关文章推荐
- c语言实现基数排序解析及代码示例
- 基数排序-C语言实现
- 桶排序升级之基数排序c语言实现10.1.2
- 基数排序-C语言实现
- 排序(2)---------简单插入排序(C语言实现)
- c语言实现选择排序、冒泡排序、插入排序
- C语言实现冒泡排序-整数排序
- 排序之二:希尔排序(C语言实现)
- C语言选择排序详解及其实现笔记
- 排序之五:快速排序(C语言实现)
- 数据结构之---C语言实现选择排序
- [算法练习]选择排序的C语言实现
- (排序)用C语言实现的希尔排序(插入排序)
- 快速排序_C语言实现
- 基数排序-数组模拟实现
- 排序网络(Sorting network )构造的C语言实现
- C语言8种排序算法及其实现 1.希尔排序 2.二分插入法 3.直接插入法 4.带哨兵的直接排序法 5.冒泡排序 6.选择排序 7.快速排序 8.堆排序
- 数据结构中的排序——C语言实现排序源代码
- c语言实现选择排序
- 快速排序(C语言实现)