基本概念:基数排序(Radix Sorting)是一种借助多关键字排序的思想对单逻辑关键字进行关系的方法。
基数排序不需要进行记录关键字间的比较。
主要分为两个过程:
(1)分配,先从个位开始,根据位值(0-9)分别放到0~9号桶中(比如53,个位为3,则放入3号桶中)。
(2)收集,再将放置在0~9号桶中的数据按顺序放到数组中 。
基数排序的特点:
稳 定 性:稳定
时间复杂度:O(kn)(k表示整形的最高位)
空间复杂度:O(10n)
#include <iostream> #include <stdlib.h> void RadixCountSort(int *index, int *a, int len) //收集 { int *count = (int *)malloc(sizeof(int) * 10); int i; 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 - 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 *radix = (int *)malloc(sizeof(int) * len); int x = 1; int tmp = 1; while (x) { int i; x = 0; tmp *= 10; for (i = 0; i < len; i++) { radix[i] = a[i] % tmp; radix[i] /= tmp / 10; if (a[i] / tmp > 0) { x = 1; } } RadixCountSort(radix, a, len); } free(radix); } int main() { int i; int a[] = {278, 109, 63, 930, 589, 184, 505, 269, 8, 83}; int len = sizeof (a) / sizeof (int); RadixSort(a, len); for (i = 0; i < len; i++) { printf("%d ", a[i]); } printf("\n"); while(1); return 0; }