算法复习之基数排序
来源:互联网 发布:33周胎儿正常b超数据 编辑:程序博客网 时间:2024/06/03 15:01
LSD:从低位排序逐步至高位排序,此处的低位指的是从个位->十位->百位….
代码如下:
//获取数据d位的值int getDigit(int x,int d){ int value = 1 ; for(int i = 0 ;i <d-1;++i) value *= 10 ; return (x/value)%10;}//LSD 算法void lsdRadixSort(int *arr,int begin,int high,int d){ int i,j ; const int radix = 10 ; int count[radix] ={0} ; int *bucket = (int*)malloc(end-begin+1)*sizeof(int)); for(int k = 1;k<=d;++k) { //计算每个桶中的元素个数 for(i = begin;i<=end;++i) ++count[getDigit(arr[i],d)] ; // for(i = 1;i<radix;++i) count[i]+=count[i-1]; //装入元素 for(i = end;i>=begin;--i) { j = getDigit(arr[i],d); bucket[count[j]-1] = arr[i] ; --count[j]; } //将d位排序完的数据拷贝至arr中 for(i = begin,j=0;i<=end;++i,++j) arr[i] = bucket[j] ; }}//MSD算法 从高位排序至低位排序void msdRadixSort(int *arr,int begin,int end,int d){ const int radix = 10 ; int i,j ; int *bucket = (int*)malloc((end-begin+1)*sizeof(int)); //求出d位中各个桶的元素个数,即分段d位分别为0-9的个数 for(i = begin;i<=end;++i) { ++count[getDigit(arr[i],d)]; } //求出各个桶的边界索引0-9中每一个段的元素个数 for(i = 1;i<radix;++i) count[i] += count[i-1] ; //装入桶中 for(i = end;i>=begin;--i) { j = getDigit(arr[i],d) ; bucket[count[j]-1] = arr[i] ; --count[j]; } //从桶中收集数据 for(i= begin,j = 0 ;i<=end;++i,++j) arr[i] = bucket[j] ; for(i = 0 ;i<radix;++i) { int low = begin + count[i] ; int high = begin + count[i+1]; if(low < high && d>1) msdRadix(arr,low,high); }
0 0
- 算法复习之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 【排序算法】之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- java算法之基数排序
- 排序算法之基数排序
- Java算法之基数排序
- 快速掌握iOS 开发的技巧和方法
- 欢迎使用CSDN-markdown编辑器
- Apache Shiro与Spring Security学习
- 游戏开发与设计
- javascript中onclick(this)用法介绍
- 算法复习之基数排序
- Spark中的一些配置
- android圆形扇形进度条
- hadoop优化
- 程序员的开发项目总是半途而废
- 隐藏导航栏之后支持手势退回上一个控制器
- 深入理解Servlet转发和重定向
- 用户用浏览器访问一个网站的时候具体的过程与步骤
- StreamReader/StreamWriter与FileStream用法详解