/*****基数排序******/
#define N 10
#define RADIX 10
#include<iostream>
using namespace std;
int GetDataPos(int Data, int &pos) //得到一个数的pos位置的值
{
int temp = 1;
for (int i = 0; i < pos - 1; i++)
temp *= 10;
return (Data / temp) % 10;
}
int GetKeyNum(int *a) //判定最大数的位数
{
int max = 0,count=0;
for (int i = 1; i != N; i++)
{
if (a[max] < a[i])
max = i;
}
int temp = a[max];
while (temp!=0)
{
count++;
temp /= 10;
}
return count;
}
void RadixSort(int *a,int len)
{
int RArray[RADIX][N+1];
for (int i = 0; i != RADIX; i++)
RArray[i][0] = 0;
int keynum = GetKeyNum(a);
for (int pos = 1; pos <= keynum; pos++)
{
for (int i = 0; i != len; i++) //分配
{
int radix = GetDataPos(a[i], pos);
int index = ++RArray[radix][0];
RArray[radix][index] = a[i];
//cout << a[i] <<" "<< radix << " " << index << endl;
}
for (int i = 0,j=0; i != RADIX; i++) //收集
{
for (int k = 1; k <= RArray[i][0]; k++)
a[j++] = RArray[i][k];
RArray[i][0] = 0;
}
cout << "第" << pos << "趟:";
for (size_t i = 0; i != N; i++)
cout << *(a + i) << " ";
cout << endl;
}
}
int main()
{
int a[N];
for (size_t i = 0; i != 10; i++)
cin >> a[i];
RadixSort(a,N);
cout << "排好后结果为:" << endl;
for (size_t i = 0; i != 10; i++)
cout << a[i] << " ";
return 0;
}
基数排序
最新推荐文章于 2019-07-31 17:22:25 发布