数据结构 排序 基数排序(1)
来源:互联网 发布:linux 执行二进制文件 编辑:程序博客网 时间:2024/06/13 23:25
1.可参考代码
#include <bits/stdc++.h>#define SIZE 0x32#define rd 10using namespace std;typedef struct snode{ int key; struct snode* next;//下位指针} *sRadix;typedef struct bnode{ sRadix d[SIZE];//最大长度 int length;//实际长度} bRadix;int a[] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000};//辅助下标数组int getPos(int value, int pos);//获得下标void radixSort(bRadix &rl);//基数排序void printL(bRadix rl);//打印收集链表void printC(bRadix r);//打印分配过程int main(){ bRadix rl;//收集主链表 bRadix la;//运动链表 cout << "- - - - - - - - -1.基数排序- - - - - - - - -\n"; cout << "请输入需排序的序列的长度:\n"; cin >> rl.length; cout << "初始化收集表..."; rl.d[rl.length] = new snode; rl.d[rl.length]->next = NULL; la = rl; cout << "请输入序列的元素集合:\n"; for(int i = 0; i < rl.length; i++){//初始化收集链表 sRadix p = new snode; cin >> p->key; p->next = la.d[rl.length]->next; la.d[rl.length]->next = p; la.d[rl.length] = p; } radixSort(rl); cout << "进过排序后的序列如下...\n"; printL(rl); return 0;}int getPos(int value, int pos){ return value / a[pos - 1] % 10;}void radixSort(bRadix &rl){ int maxValue = 0, d = 1; bRadix r; r.length = rl.length; r.d[r.length] = rl.d[rl.length]; while(r.d[rl.length]->next){ if(r.d[rl.length]->next->key > maxValue) maxValue = r.d[rl.length]->next->key; r.d[rl.length] = r.d[rl.length]->next; } for(int i = 1; i < rd; i++) if(maxValue / a[i] == 0) break; else d++; for(int i = 1; i <= d; i++){ printf("- - - - - - - - -第%d次分配- - - - - - - - -\n", i); bRadix r2, r0; r0.length = r2.length = rl.length; r0.d[r0.length] = r2.d[r2.length] = rl.d[rl.length]; for(int k = 0; k < rl.length; k++){ r0.d[k] = r2.d[k] = new snode; r0.d[k]->next = r2.d[k]->next = NULL; } while(r0.d[r0.length]->next){ int key = r0.d[rl.length]->next->key; int pos = getPos(key, i); for(int j = 0; j < rd; j++){ if(pos == j){ sRadix p = new snode; p->key = key; p->next = r0.d[j]->next; r0.d[j]->next = p; r0.d[j] = p; j = rd; } } r0.d[r0.length] = r0.d[r0.length]->next; } printC(r2); for(int j = 0; j < rd; j++){ if(r2.d[j]){ while(r2.d[j]->next){ int key = r2.d[j]->next->key; r2.d[rl.length]->next->key = key; r2.d[j] = r2.d[j]->next; r2.d[rl.length] = r2.d[rl.length]->next; } } } } cout << "- - - - - - - - -排序结束- - - - - - - - -\n";}void printL(bRadix rl){ while(rl.d[rl.length]->next){ cout << rl.d[rl.length]->next->key << " "; rl.d[rl.length] = rl.d[rl.length]->next; } cout << endl;}void printC(bRadix r){ for(int i = 0; i < rd; i++){ printf("#(%d)", i); if(r.d[i]){ while(r.d[i]->next){ cout << "->" << r.d[i]->next->key; r.d[i] = r.d[i]->next; } } cout << endl; }}
2.实际结果图
阅读全文
0 0
- 数据结构 排序 基数排序(1)
- 数据结构 排序 基数排序
- 【数据结构】-归并排序,基数排序
- 【数据结构之排序10】基数排序
- 数据结构之归并排序、基数排序
- 数据结构-基数排序(桶排序)
- C++代码,数据结构-内部排序-基数排序-链式基数排序
- 数据结构_内部排序_链式基数排序
- 数据结构中排序算法- 基数排序(5)
- 数据结构===》排序之基数排序
- 数据结构-从计数排序到基数排序
- 数据结构复习-归并排序和基数排序
- 数据结构之桶排序与基数排序
- java数据结构与算法-高级排序-基数排序
- 图解"数据结构--内部排序算法"----分配排序:箱排序、基数排序
- 数据结构--排序算法(归并排序&&基数排序&&桶排序)
- 数据结构-基数排序
- 数据结构学习笔记 --- 排序(归并排序、基数排序)
- jmeter中用同一个正则表达式获取多个响应返回值
- js代码规范
- java : java -jar,java -cp,jar cvf 命令详解
- 201709-2 公共钥匙盒 解题报告
- 搭建Sphinx全文搜索引擎
- 数据结构 排序 基数排序(1)
- SWIFT基础篇
- spring Session + Redis集群 + 哨兵部署下实现Session共享
- Concurrent包
- ACM数论模板及应用
- 排序_算法_数据结构
- 百度竞价要懂的公式
- copy && mutableCopy
- JScrollPane中放JTable,但滚动条一直不显示