[数据结构]Radix_sort(MSD)
2016-04-30 22:13
465 查看
//.h #include<queue> #include"Linked_list.h" #include"Record.h" const int max_char = 28; //分为28组,一组用于放置空,一组用于放置非法字符 class Sortable_list:public List<Record> { public: void radix_sort(); private: void rethread(queue<Record> queues); //合并函数 void sort(queue<Record> &queues,int deep); //分桶函数 }; int alphabetic_order(char c); //辅助函数
//.cpp #include "Radix_sort.h" #include<iostream> using namespace std; int alphabetic_order(char c) { if (c == ' ' || c == '\0') return 0; if (c >= 'a'&&c <= 'z')return (c - 'a' + 1); if (c >= 'A'&&c <= 'Z')return (c - 'A' + 1); return 27; } void Sortable_list::radix_sort() { Record data; queue<Record> queues; while(remove(0,data)==success){ queues.push(data); } sort(queues, key_size); } void Sortable_list::rethread(queue<Record> queues) { Record x; while (!queues.empty()) { x = queues.front(); insert(size(), x); queues.pop(); } } void Sortable_list::sort(queue<Record> &queues,int deep) { Record data; queue<Record>recur_queues[max_char]; unsigned int size = queues.size(); for (unsigned int i = 0; i < size; i++) { data = queues.front(); queues.pop(); int queue_order = alphabetic_order(data.key_letter(key_size-deep)); recur_queues[queue_order].push(data); } //递归调用 for (int i = 0; i < max_char; i++) { if (deep > 1) sort(recur_queues[i], deep - 1); } for (int i = 0; i < max_char; i++) rethread(recur_queues[i]); }
相关文章推荐
- 数据结构与逻辑代码(一)
- 数据结构(c)——二叉树
- BZOJ 1208 平衡树Treap模版题
- Python全栈开发之2、运算符与基本数据结构
- HDU 4747 线段树+思维
- 数据结构相同情况下数据表之间数据的快速"copy"
- C++数据结构
- 数据结构-Trie树
- 查找 -数据结构
- 查找 -数据结构
- 数据结构修改后,序列化到本地的数据读取错误
- 【数据结构与算法】十五 平衡二叉树
- Java千百问_06数据结构(002)_java有哪8种基本数据类型
- Java千百问_06数据结构(001)_java中数据类型是什么
- springmvc中的RequestBody自动注入List, Map, String数据结构的数据
- 链表的倒序打印
- poj 初级训练计划数据结构总结
- 一、hbase的核心数据结构
- 数据结构与算法分析(1)引论
- C语言数据结构学习网站