标签:基数排序
示例代码:
#include <iostream>
#include <cstdio>
using namespace std;
//基数排序(LSD)从最低位到最高位进行如此的分配收集
void print(int a[], int n)
{
for(int t=0; t<n; ++t)
{
if(t+1<n)
{
printf("%d ", a[t]);
} else {
printf("%d\n", a[t]);
}
}
}
int caldigit(int num, int d)
{
int a[3] = {1, 10, 100};
return num/a[d]%10;
}
void radixSort(int a[], int begin, int end)
{
int count[10]; //一共有10个桶
int len = end-begin+1;
int *p = (int*)malloc((end-begin+1)*sizeof(int));
for(int i=0; i<3; ++i) //一共有3位数字,从低位开始
{
for(int t=0; t<10; ++t)
{
count[t] = 0;
}
for(int t=begin; t<=end; ++t)
{
count[caldigit(a[t], i)]++;
}
for(int t=1; t<10; ++t)
{
count[t] += count[t-1];
}
for(int t=end; t>=begin; --t) //从后往前排,保证基数排序的稳定性
{
int pos = caldigit(a[t], i); //表示是第几号桶
p[count[pos]-1] = a[t];
count[pos]--;
}
for(int t=0; t<len; ++t)
{
a[t+begin] = p[t];
}
}
free(p);
return ;
}
int main()
{
int a[] = {4, 2, 43, 29, 312, 412, 143, 689};
printf("排序前:\n");
print(a, 8);
printf("排序后:\n");
radixSort(a, 0, 7);
print(a, 8);
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:基数排序
原文地址:http://blog.csdn.net/u012432475/article/details/47381665