标签:统计 索引 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