桶排序
程序员文章站
2022-03-03 08:41:05
...
《算法导论》第3版8.4描述了桶排序
桶排序将[0,1)区间划分为n个相同大小的子区间,或称为桶。
然后,将n个输入数分别放到各个桶中。
为了得到输出结果,先对各个桶中的数进行排序,然后遍历每个桶,
按照次序把各个桶中的元素列出来即可。
代码如下
struct Node
{
double value;
Node *next;
};
void bucket_sort(double A[], int len)
{
Node bucket[10];
int num = 0;
Node *p = NULL;
Node *q = NULL;
int count = 0;
for (int i = 0; i < 10; ++i)
{
bucket[i].value = 0;
bucket[i].next = NULL;
}
for (int i = 0; i < len; ++i)
{
Node *insert = new Node();
insert->value = A[i];
insert->next = NULL;
num = A[i] * 10;
if (bucket[num].next == NULL)
{
bucket[num].next = insert;
}
else
{
p = &bucket[num];
q = bucket[num].next;
while (q != NULL && A[i] >= q->value)
{
q = q->next;
p = p->next;
}
insert->next = q;
p->next = insert;
}
}
for (int i = 0; i < 10; ++i)
{
p = bucket[i].next;
if (p == NULL)
continue;
while (p != NULL)
{
A[count++] = p->value;
p = p->next;
}
}
}
上一篇: 桶排序