基数排序介绍
基数排序(Radix Sort)是桶排序的扩展,它的基本思想是:将整数按位数切割成不同的数字,然后按每个位数分别比较。
具体做法是:将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。
基数排序图文说明
通过基数排序对数组{53, 3, 542, 748, 14, 214, 154, 63, 616},它的示意图如下:
在上图中,首先将所有待比较数统一为统一位数长度,接着从最低位开始,依次进行排序。
- 按照个位数进行排序。
- 按照十位数进行排序。
- 按照百位数进行排序。
排序后,数列就变成了一个有序序列。
步骤
1.找最大值
2.计算最大值位数
3.各位进行分组处理(数据入组,数据放回原数组,释放)
计算最大值位数
123:
1.个位 123/1%10
2.十位 123/10%10
3.百位 123/100%10
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node
{
int nVal;
struct node *pNext;
}Radix;
void Sort(int arr[],int len,int begin,Radix **pRadix)
{
int nBase = 1;
while (begin > 1)
{
nBase = nBase*10;
begin--;
}
//数据入组
int nIndex;
int i;
Radix *pTemp = NULL;
Radix *pMark = NULL;
for(i = 0;i&l