基数排序
基数排序:是桶排序的扩展,将整数位数切割成不同的数字,然后按照每个位数分别比较
算法步骤
- 将所有待比较数值统一为同样的数位长度,数位较短的数前面补零
- 从对低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序后,数列就变成一个有序序列
代码实现
c++代码实现:
int max_bit(int num[], int len){ //获取数组中最大位数
int bit = 1;
int radix = 10;
for (int i = 0; i < len; i++) {
while(num[i] >= radix){
radix *= 10;
bit++;
}
}
return bit;
}
int radix_sort(int num[], int len){
int bitCount = max_bit(num, len);
int *temp = new int[len];
int *buckets = new int[10];
int radix = 1;
for(int count = 0; count < bitCount; count++){
for(int i = 0; i < 10; i++) //存储“被排序数据”的临时数组
buckets[i] = 0;
for (int j = 0; j < len; j++) //将数据出现的次数保存在桶中
buckets[ (num[j] / radix) % 10 ]++;
for(int i = 1; i < 10; i++) //更改buckets[i]的值,让值更改后正好是temp的位置
buckets[i] += buckets[i-1];
for (int index = len - 1; index >= 0; index--) { //将数据临时存储在temp中
temp[ buckets[(num[index] / radix) % 10 ] - 1] = num[index];
buckets[(num[index] / radix) % 10]--;
}
for (int i = 0; i < len; i++) {
num[i] = temp[i];
}
radix *= 10;
}
delete[] temp;
delete[] buckets;
}