【排序】--C语言实现基数排序

基数排序 基数排序适合整理较大的数据。先根据个位数排序,再根据十位数排序,以此类推,最终得到一组有序的数据。代码复杂的地方是如果收集数据。先定义十个“桶”,将个位按照具体的数字放在对应的“桶”内。收集的过程需要重新申请一块空间,从原始序列的最后一个数字开始,找出它在新序列中的位置,循环完成收集。
代码

#include #include #include void RadixSort(int *a, int length) { int i, max = a[0], base = 1; ; for (i = 1; i < length; i++) { if (a[i] > max) { max = a[i]; } } int *t = (int *)malloc(sizeof(int) * length); while (max / base > 0) { int bucket[10] = {0}; for (i = 0; i < length; i++) { bucket[a[i] / base % 10]++; } for (i = 1; i < 10; i++) { bucket[i] += bucket[i - 1]; } for (i = length - 1; i >= 0; i--) { t[bucket[a[i] / base % 10] - 1] = a[i]; //原始序列中最后一个数据,放在新序列下标为 bucket[a[i] / base % 10] - 1 的地方。 bucket[a[i] / base % 10]--; } for (i = 0; i < length; i++) { a[i] = t[i]; }base = base * 10; } }int main() { int i; //int array[10] = {9, 3, 4, 4, 6, 0, 1, 3, 8, 5}; int array[10000] = {0}; srand(time(NULL)); for (i = 0; i < 10000; i++) { array[i] = rand() % 1000; } RadixSort(array, sizeof(array) / sizeof(array[0])); for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) { printf("%d ", array[i]); } printf("\n"); return 0; }

【【排序】--C语言实现基数排序】更多文章、视频、嵌入式学习资料,微信关注 【学益得智能硬件】
【排序】--C语言实现基数排序
文章图片

    推荐阅读