基数排序的原理:
(1)首先,把整数通过求余的方式拆分成“个位、十位、百位、… ”;
(2)然后,统计每个整数的“个位、十位、百位、… ”出现的次数,之后把次数存到以“余数”为编号的桶子里;
(3)最后,通过一个整数出现的次数-1,从而算出正确顺序的位置,再把整数放进去,就有顺序了。
#include <iostream>
#include <stdlib.h>
using namespace std;
/*******************************************/
/* 基数排序
/******************************************/
/*设数组元素为X,
因为要统计个十百到高位,
所以要用求余公式:
(1)个位数 =(X/1)%10;
(2)十位数 =(X/10)%10;
(3)百位数 =(X/100)%10;
(4) ... ... ...
/**************************************/
int MaxDigit(int array[], int n) //获取数组中最大元素有多少位
{
int digit = 1; //位数从个位开始
int radix = 10;
for (int i = 0; i < n; i++)
{
while (array[i] >= radix)
{
radix = radix * 10;
++digit;
}
}
return digit; //返回最大元素的位数
}
void RadixSort(int array[], int n) //基数排序函数
{
int digit = MaxDigit(array, n);
int temp[6]; //这里以6个元素为例
int buckets[10]; //数组元