链式队列实现基数排序
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; }
相关文章推荐
- 基数排序-队列实现
- 用链表队列实现基数排序;
- 链式基数排序
- C语言 队列的链式结构的实现与表示 数据结构 队列的实现与表示
- 数据结构之C++实现链式队列(LinkQueue)(无主函数)
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 基数排序算法之Java实现
- 链式队列实现迷宫寻径
- 链式队列实现
- 数据结构学习----链式队列(Java实现)
- 链式队列(C实现)
- 链式队列插入元素实现
- 8大内部排序算法学习笔记--(4)归并、基数排序 Java实现
- 链式队列的基础操作实现(C语言)
- 单链表实现队列链式存储
- 链式队列的实现
- (C语言版)栈和队列(一)——实现链式栈和链式队列的基本操作以及遇到的问题
- 数据结构基础(14) --链式队列的设计与实现
- C链式队列的实现
- 算法:背包,栈,队列的简单实现,链式结构