码迷,mamicode.com
首页 > 编程语言 > 详细

基数排序的lsd实现c++

时间:2017-10-20 20:07:13      阅读:140      评论:0      收藏:0      [点我收藏+]

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

基数排序的lsd实现c++

标签:统计   索引   const   max   space   结果   eof   mil   sizeof   

原文地址:http://www.cnblogs.com/enyala/p/7700996.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!