标签:统计 索引 const max space 结果 eof mil sizeof
#include<iostream> #include<cstdlib> using namespace std; const int MAXSIZE=10000; int getdigit(int x,int d) { int a[]={ 1,1,10,100 }; return (x/a[d])%10; } void PrintArr(int ar[],int n) { for(int i=0;i<n;++i) { cout<<ar[i]<<" "; } cout<<endl; } void lsdradix_sort(int arr[],int begin,int end,int d) { const int radix=10; int count[radix],i,j; int *bucket=(int*)malloc((end-begin+1)*sizeof(int));//所有桶的空间开辟 //按照分配标准依次进行排序过程 for(int k=1;k<=d;++k) { //置空 for(i=0;i<radix;++i) { count[i]=0; } //统计各个桶中所盛数据个数 for(i=begin;i<=end;++i) { count[getdigit(arr[i],k)]++; } //count[i]表示第i个桶的右边界索引 for(i=1;i<radix;i++) { count[i]=count[i]+count[i-1]; } //把数据依次装入桶(装入时候注意分配技巧) for(i=end;i>=begin;--i)//从右向左扫描,保证排序稳定性 { j=getdigit(arr[i],k);//求出关键码的第k位数字,例如576的第3位是5 bucket[count[j]-1]=arr[i];//放入对应的桶中,count[j]-1是第j个桶的右边界索引 --count[j]; } //此时count[i]为第i个桶左边界 //从各个桶中收集数据 for(i=begin,j=0;i<=end;++i,++j) { arr[i]=bucket[j]; } } free(bucket); } int main() { int br[10]={ 23,34,54,67,3,76,2,87,25,76 }; cout<<"元数据如下:"<<endl; PrintArr(br,10); lsdradix_sort(br,0,9,3); cout<<"排序后数据如下:"<<endl; PrintArr(br,10); }
最低位优先法首先依据最低位关键码Kd对所有对象进行一趟排序,
再依据次低位关键码Kd-1对上一趟排序的结果再排序,
依次重复,直到依据关键码K1最后一趟排序完成,就可以得到一个有序的序列。
使用这种排序方法对每一个关键码进行排序时,不需要再分组,而是整个对象组。
from[http://www.cnblogs.com/Braveliu/archive/2013/01/21/2870201.html]
标签:统计 索引 const max space 结果 eof mil sizeof
原文地址:http://www.cnblogs.com/enyala/p/7700996.html