基数排序
2014-08-01 09:42
197 查看
分析来自点击打开链接
简略概述:基数排序是通过“分配”和“收集”过程来实现排序。而这个思想该如何理解呢?请看以下例子。
(1)假设有欲排数据序列如下所示:
73 22 93 43 55 14 28 65 39 81
首先根据个位数的数值,在遍历数据时将它们各自分配到编号0至9的桶(个位数值与桶号一一对应)中。
分配结果(逻辑想象)如下图所示:
分配结束后。接下来将所有桶中所盛数据按照桶号由小到大(桶中由顶至底)依次重新收集串起来,得到如下仍然无序的数据序列:
81 22 73 93 43 14 55 65 28 39
接着,再进行一次分配,这次根据十位数值来分配(原理同上),分配结果(逻辑想象)如下图所示:
分配结束后。接下来再将所有桶中所盛的数据(原理同上)依次重新收集串接起来,得到如下的数据序列:
14 22 28 39 43 55 65 73 81 93
code:
简略概述:基数排序是通过“分配”和“收集”过程来实现排序。而这个思想该如何理解呢?请看以下例子。
(1)假设有欲排数据序列如下所示:
73 22 93 43 55 14 28 65 39 81
首先根据个位数的数值,在遍历数据时将它们各自分配到编号0至9的桶(个位数值与桶号一一对应)中。
分配结果(逻辑想象)如下图所示:
分配结束后。接下来将所有桶中所盛数据按照桶号由小到大(桶中由顶至底)依次重新收集串起来,得到如下仍然无序的数据序列:
81 22 73 93 43 14 55 65 28 39
接着,再进行一次分配,这次根据十位数值来分配(原理同上),分配结果(逻辑想象)如下图所示:
分配结束后。接下来再将所有桶中所盛的数据(原理同上)依次重新收集串接起来,得到如下的数据序列:
14 22 28 39 43 55 65 73 81 93
code:
#include <iostream> #include <math.h> using namespace std; #define RADIX 10 #define D 10 int GetNumInPos(int n,int pos){ int tmp=1; for(int i=0;i<pos-1;i++){ tmp*=10; } return (n/tmp)%10; } void RadixSort(int data[],int len){ if(len<=0) return; int *radix[10]; for(int i=0;i<10;i++){ radix[i]=new int[10]; radix[i][0]=0; } for(int pos=1;pos<=D;pos++){ for(int i=0;i<len;i++){ int num=GetNumInPos(data[i],pos); int index=++radix[num][0]; radix[num][index]=data[i]; } int i=0; for(int j=0;j<10;j++){ for(int k=1;k<=radix[j][0];k++){ data[i++]=radix[j][k]; } radix[j][0]=0; } } } void PrintArr(int ar[],int n) { for(int i = 0; i < n; ++i) cout<<ar[i]<<" "; cout<<endl; } int main(){ int ar[] = {12, 14, 54, 5, 6, 3, 9, 8, 47, 89}; int len = sizeof(ar)/sizeof(int); cout<<"排序前数据如下:"<<endl; PrintArr(ar, len); RadixSort(ar,len-1); cout<<"排序后结果如下:"<<endl; PrintArr(ar, len); return 0; }
相关文章推荐
- 基数排序
- python算法学习之基数排序实例
- 数据结构-算法: 分配排序(基数分配排序法)
- 第十六周--项目1-验证算法(8)基数排序
- 快速排序,归并排序,堆排序,基数排序,插入排序,希尔排序,
- 排序算法总结(4)——归并排序、基数排序
- 桶排序与基数排序与计数基数排序
- 基数排序-C语言实现
- 排序算法九:基数排序
- 线性排序之基数排序,桶排序,计数排序
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序的C++代码实现
- 20180324基数排序(没太看懂)
- 基数排序优化
- 排序算法之基数排序 - JavaScript实现
- 经典算法之基数排序两种实现
- 基数排序
- PHP排序算法之基数排序(Radix Sort)实例详解
- 算法导论-- 线性时间排序(计数排序、基数排序、桶排序)
- 【8086汇编】基础排序之基数排序
- LSD:低关键字优先;链式基数排序;lst.remove();取出和删除表头元素