/**
* author: bbird_gl
* date: 2019/7/11
* description: 基排序(计数法实现)
*/
#include <stdlib.h>
#include <string.h>
//n为数组大小,d为排序码数, r为基数
void RadixSort(int arr[], int n, int d, int r)
{
int *tempArr = (int *)malloc(n * sizeof(int)); //临时数组
int *count = (int *)malloc(r * sizeof(int)); //计数数组
int i, j, k;
int radix = 1; //用于取arr[j]的第i位排序码
for (i = 0; i < d; i++) {
memset(count, 0, r * sizeof(int)); //数组清零
for (j = 0; j < n; j++) {
k = (arr[j] / radix) % r;
count[k]++;
}
//用于求数组元素在tempArr中的位置
for (j = 1; j < r; j++)
count[j] = count[j - 1] + count[j];
for (j = n - 1; j >= 0; j--) {
k = (arr[j] / radix) % r;
count[k]--;
tempArr[count[k]] = arr[j];
}
//将临时数组中的内容复制到arr中
for (j = 0; j < n; j++)
arr[j] = tempArr[j];
//用于取下一位排序码
radix *= r;
}
free(tempArr);
free(count);
}