您的位置:首页 > 其它

链式队列实现基数排序

2016-10-07 21:26 211 查看
        用基数排序对整数排序,其中的insert_tail为链式队列的入队,del_head为出队。先找出总的循环次数,即数组中的最大值的位数。开辟10个队列,进行第一次入队,将每个数插入到以个位为编码的队列中,后有序的出队,0号队列,1号队列到十号队列。同理进行十位百位等。基数排序的时间复杂度较冒泡排序少,但空间复杂度较大。

bool radix_sort(int *arr, int len)
{
int max = find_max(arr, len);//数组中最大数
int num =get_queue_num(max);//总的循环次数
Queue *phead = (Queue *)malloc(sizeof(Queue)*radix);//开辟队列指针数组
assert(phead != NULL);

for(int x=0; x<radix; x++)
{
phead[x].head = NULL;
phead[x].tail = NULL;
}

elem_type elem = 0;
for (int k=0; k<num; k++)
{
for (int i=0; i<len; i++)
{
int index = (arr[i]/(int)pow((double)radix,(double)k))%radix;

Node *node = create_node();
node->data = arr[i];
insert_tail(phead+index, node);
}

int m = 0;
for (int i=0; i<radix; i++)
{
while( !is_empty(phead+i) )//将每个队列中的元素出栈
{
bool b = del_head(phead+i, &elem);
arr[m] = elem;
m++;
}
}
}

free(phead);
return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息