适用范围:输入是一些小的整数。
时间复杂度:O(P(N+B)) P:排序的趟数 N:被排序的元素的个数 B:桶数
算法:
1. 设置B个桶,为方便,可设0,1,...,9
2. 从低位开始,按照该位的大小,依次放入对应的桶
时间复杂度:O(P(N+B)) P:排序的趟数 N:被排序的元素的个数 B:桶数
算法:
1. 设置B个桶,为方便,可设0,1,...,9
2. 从低位开始,按照该位的大小,依次放入对应的桶
3. 放完最高位,按顺序取出,即为排序后的结果
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <math.h>
#define OK 1
#define ERROR 0
#define NUMBER 10
#define TOTAL 100
int bucketGroup[NUMBER][TOTAL];
typedef int status;
status sort(int *number, int n, int index)
{
unsigned char B_number[NUMBER];
memset(B_number, 0, NUMBER * sizeof(unsigned char));
int tmp[TOTAL];
for (int i = 0; i < n; i++)
tmp[i] = number[i];
int tmp_digit = 0;
for (int i = 0; i < n; i++)
{
tmp_digit = tmp[i] / (int)pow(10,index - 1) % 10; //注意pow返回是double类型,需强制转换
bucketGroup[tmp_digit][B_number[tmp_digit]++] = tmp[i];
}
int count = 0;
for (int i = 0; i < NUMBER; i++)
for (int j = 0; j < B_number[i]; j++)
number[count++] = bucketGroup[i][j];
return OK;
}
int main()
{
int number[20];
for (int i = 0; i < 20; i++)
number[i] = rand()%1000;
for (int sort_no = 1; sort_no <= 3; sort_no++)
{
sort(number, 20, sort_no);
for (int i = 0; i < 20; i++)
printf("%d\t", number[i]);
printf("\n");
}
return 0;
}