基數排序的lsd實現c++

來源:互聯網
上載者:User

標籤:統計   索引   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++

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.