桶排序
桶排序(Bucket Sort)是对基数排序的一个变种。在排序过程中没有用到计数数组,而是用不同的桶来暂时存储关键字。看一个示意图:
排序序列 123 234 45 111 6 128
整个过程就是在不断地分配、收集。并且每一个桶都是队列,所以收集的时候得按先进先出的原则,且从第0个桶开始收集。
在实际应用中,根据桶的创建策略,桶排序也有不同的写法。下面给出两种不同的桶创建方式。一、使用静态队列创建桶。二、使用二维数组模拟桶。
静态队列桶
#include<iostream>
#include<iomanip>
using namespace std;
//记录类型
typedef struct record
{
int key;
int next;
}Record;
//静态队列
typedef struct queue
{
//队头
int head;
//队尾
int tail;
}StaticQueue;
//获取最大位数
int get_max_digit(int array[], int n)
{
int digit, max;
digit = 0;
max = array[0];
for (int i = 1; i < n; i++)
{
if (array[i] > max)
max = array[i];
}
while (max)
{
digit++;
max /= 10;
}
return digit;
}
/*
收集
把10个桶连接起来
*/
void collect(Record rec[], StaticQueue queue[], int& first)
{
//k是桶号
int tail, k = 0;
//先找到第一个非空的桶
wh