基数排序,,,感想
来源:互联网 发布:淘宝美工如何接私活 编辑:程序博客网 时间:2024/06/08 20:17
基数排序正常是用链表,但是new delete 反复确实效率低下
底下这个是用的c++的列队,底层效率不高
但若用游标链表可以少了new跟delete的代价,只要复制一份待排序数内存即可
但有更高效的实现方式,就是比如30个数随机分布用概率论可以算的理论上基数10的话每桶是3,
<span style="white-space:pre"></span>超出的部分用新的桶数组去排序,6-9-12总有完结的时候,比较优
真正的桶式排序 却是超大重复数的 小区间统计,比如高考,无太多意义,就是统计而已
慢慢觉得 写框架也好,写数据结构也好,不是一个例子可以抄袭,不是学会树上的几种结构就OK,
主要数据结构学的个人觉得还是手上的实现能力,,,具体工程需要具体设计优化,当然也需要证明实现的正确性,甚至空间时间的界的明确证明,
<span style="white-space:pre"></span>
#include<iostream>#include<stdio.h>#include<stdlib.h>#include<time.h>#include<deque>#define random(x) (rand()%x)using namespace std;/*============================================= 1.有30个随机数,用随机数初始化数组; 3.需要1桶数组deque<int> bucket[10],每桶一个队列, 4.以基数10桶排,弄个求得位大小函数getPerDigit(); 依次遍历4次 依照位大小,全部放桶里 每桶按顺序复制到原始数组,供读取继续 ==============================================*/void baseSort(int*ia){ int getPerDigit(int digit,int ival); deque<int> bucket[10]; for(int dgt=1;dgt!=5;++dgt) {//总遍历4次,即4个位数 cout<<"\n digit: "<<dgt<<"\n "; for(int x=0;x!=30;x++) { int tmp=getPerDigit(dgt,ia[x]); bucket[tmp].push_back(ia[x]); }//比如个位数,全放桶里完毕 //接着遍历桶放到数组 int i=0; for(int x=0;x!=10;) {// if(i==30)//虽然多余不会越界// break; while(!bucket[x].empty()) {//某一桶依次弄空方数组里 ia[i]=bucket[x].front(); cout<<ia[i++]<<","; bucket[x].pop_front(); } ++x;//下一桶 }//复制到原来数组,覆盖完毕 //接着弄下一位高位++digit }}int* initialize(){ int *ia=new int[30]; srand((int)time(0)); for(int x=0;x!=30;x++) ia[x]=random(9999); return ia;}int getPerDigit(int digit,int ival){//digit是3,即是百位树 int base=1; while(--digit!=0) base*=10;//获得100 int temp=ival/base; return temp%10;//超出位数返回0}int main(){ int* ia=initialize(); cout<<"baseSort\n ";baseSort(ia); cout<<"\n\nbaseSort,it,, succeed!\n "; for(int x=0;x!=30;x++){ cout<<ia[x]<<" "; } puts("\n\n"); return system("pause");}
0 0
- 基数排序,,,感想
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- cocos2dx TabelView 表格视图
- 备忘录模式
- c语言,顺序空间游标链表的实现
- 移植Qt-4.8.5出现undefined reference to '__sync_sub_and_fetch_4'解决方法--转载
- 快速排序 插入排序
- 基数排序,,,感想
- 关于强行装逼之代码风骚
- C 程序.data .text .bbs 概述
- NavigationView
- 9.11 编程练习
- 小Tip:从字符串中提取数字
- 106. Construct Binary Tree from Inorder and Postorder Travers
- scala学习之路:1简单的打印输出,以及for循环的使用
- ios 删除Main.storyboard和 Launch.storyboard