基数排序(Radix Sorting)是一种借助多关键字排序的思想对单逻辑关键字进行关系的方法。基数排序不需要进行记录关键字间的比较。
主要分为两个过程:
(1)分配,先从个位开始,根据位值(0-9)分别放到0~9号桶中(比如53,个位为3,则放入3号桶中)
主要分为两个过程:
(1)分配,先从个位开始,根据位值(0-9)分别放到0~9号桶中(比如53,个位为3,则放入3号桶中)
(2)收集,再将放置在0~9号桶中的数据按顺序放到数组中
基数排序的特点:
稳 定 性:稳定
时间复杂度:O(kn)(k表示整形的最高位)
空间复杂度:O(10n)
代码
#include <stdio.h>
#include <stdlib.h>
viod RadixCountSort(int *index, int *a, int len)
{
int i;
int *count = (int *)malloc(sizeof(int)*10);
for(i = 0; i < 10; i++)
{
count[i] = 0;
}
for(i = 0; i < len; i++)
{
count[index[i]]++;
}
for(i = 1; i < len; i++)
{
count[i] = count[i] + count[i - 1];
}
int *sort = (int*)malloc(sizeof(int)*len);
for(i = len -1;i>=0;i--)
{
count[index[i]] --;
sort[count[index[i]] = a[i];
}
for(i = 0;i<len;i++)
{
a[i] = sort[i];
}
free(sort);
free(count);
}
void Radix(int arr[],int len)
{
int i;
int x = 1;
int tmp = 1;
int *radix = (int *)malloc((int) * len);
while(x)
{
x = 0;
tmp = tmp * 10;
for(i = 0; i < len; i++)
{
radix[i] = a[i] % tmp;
radix[i] = radix[i] / (tmp / 10);
if(a[i] / tmp > 0)
{
x = 1;
}
}
RadixCountSort(radix,a,len);
}
free(radix);
}
int main()
{
int i = 0;
int a[]={100,201,3,7,88,2003,99,66,34,25};
int length = sizeof(a)/sizeof(a[0]);
Radix(a,len);
for(i = 0;i < len;i++)
{
printf("%d",a[i]);
}
printf("\n");
return 0;
}