亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

深入解析Radix Sort基數排序算法思想及C語言實現示例

2020-01-26 14:31:29
字體:
來源:轉載
供稿:網友

基本思想:

將待排數據中的每組關鍵字依次進行桶分配。
具體示例:

278、109、063、930、589、184、505、269、008、083

我們將每個數值的個位,十位,百位分成三個關鍵字: 278 -> k1(個位)=8,k2(十位)=7,k3=(百位)=2。

然后從最低位個位開始(從最次關鍵字開始),對所有數據的k1關鍵字進行桶分配(因為,每個數字都是 0-9的,因此桶大小為10),再依次輸出桶中的數據得到下面的序列。

930、063、083、184、505、278、008、109、589、269

再對上面的序列接著進行針對k2的桶分配,輸出序列為:

505、008、109、930、063、269、278、083、184、589

最后針對k3的桶分配,輸出序列為:

008、063、083、109、184、269、278、505、589、930

效率分析:

基數排序的性能比桶排序要略差。每一次關鍵字的桶分配都需要O(N)的時間復雜度,而且分配之后得到新的關鍵字序列又需要O(N)的時間復雜度。假如待排數據可以分為d個關鍵字,則基數排序的時間復雜度將是O(d*2N) ,當然d要遠遠小于N,因此基本上還是線性級別的。基數排序的空間復雜度為O(N+M),其中M為桶的數量。一般來說N>>M,因此額外空間需要大概N個左右。

但是,對比桶排序,基數排序每次需要的桶的數量并不多。而且基數排序幾乎不需要任何“比較”操作,而桶排序在桶相對較少的情況下,桶內多個數據必須進行基于比較操作的排序。因此,在實際應用中,基數排序的應用范圍更加廣泛。


舉例:
假設我們有一些二元組(a,b),要對它們進行以a為首要關鍵字,b的次要關鍵字的排序。我們可以先把它們先按照首要關鍵字排序,分成首要關鍵字相同的若干堆。然后,在按照次要關鍵值分別對每一堆進行單獨排序。最后再把這些堆串連到一起,使首要關鍵字較小的一堆排在上面。按這種方式的基數排序稱為MSD(Most Significant Dight)排序。

第二種方式是從最低有效關鍵字開始排序,稱為LSD(Least Significant Dight)排序。首先對所有的數據按照次要關鍵字排序,然后對所有的數據按照首要關鍵字排序。要注意的是,使用的排序算法必須是穩定的,否則就會取消前一次排序的結果。由于不需要分堆對每堆單獨排序,LSD方法往往比MSD簡單而開銷小。下文介紹的方法全部是基于LSD的。

通常,基數排序要用到計數排序或者桶排序。使用計數排序時,需要的是Order數組。使用桶排序時,可以用鏈表的方法直接求出排序后的順序。下面是一段用桶排序對二元組基數排序的程序:


#include <iostream>#include <cstdio>#include <cstdlib>#include <cmath>#include <cstring>using namespace std;struct data{  int key[2];};struct linklist{  linklist *next;  data value;  linklist(data v,linklist *n):value(v),next(n){}  ~linklist() {if (next) delete next;}};void BucketSort(data *A,int N,int K,int y){  linklist *Bucket[101],*p;//建立桶  int i,j,k,M;  M=K/100+1;  memset(Bucket,0,sizeof(Bucket));  for (i=1;i<=N;i++)  {    k=A[i].key[y]/M; //把A中的每個元素按照的范圍值放入對應桶中    Bucket[k]=new linklist(A[i],Bucket[k]);  }  for (k=j=0;k<=100;k++)  {    for (p=Bucket[k];p;p=p->next) j++;    for (p=Bucket[k],i=1;p;p=p->next,i++)      A[j-i+1]=p->value; //把桶中每個元素取出    delete Bucket[k];  }}void RadixSort(data *A,int N,int K){  for (int j=1;j>=0;j--) //從低優先到高優先 LSD    BucketSort(A,N,K,j);}int main(){  int N=100,K=1000,i;  data *A=new data[N+1];  for (i=1;i<=N;i++)  {    A[i].key[0]=rand()%K+1;    A[i].key[1]=rand()%K+1;  }  RadixSort(A,N,K);  for (i=1;i<=N;i++)    printf("(%d,%d) ",A[i].key[0],A[i].key[1]);  printf("/n");  return 0;}

基數排序是一種用在老式穿卡機上的算法。一張卡片有80列,每列可在12個位置中的任一處穿孔。排序器可被機械地"程序化"以檢查每一迭卡片中的某一列,再根據穿孔的位置將它們分放12個盒子里。這樣,操作員就可逐個地把它們收集起來。其中第一個位置穿孔的放在最上面,第二個位置穿孔的其次,等等。

對于一個位數有限的十進制數,我們可以把它看作一個多元組,從高位到低位關鍵字重要程度依次遞減??梢允褂没鶖蹬判驅σ恍┪粩涤邢薜氖M制數排序。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美夫妻性视频| 欧美美女18p| 国产欧美一区二区三区四区| 国产黑人绿帽在线第一区| 在线观看精品自拍私拍| 91老司机精品视频| 91精品国产99久久久久久| 欧美黄色三级网站| 精品偷拍一区二区三区在线看| 日韩精品视频在线观看免费| 欧美疯狂做受xxxx高潮| 一区二区国产精品视频| 亚洲第一页自拍| 精品人伦一区二区三区蜜桃网站| 国产成人小视频在线观看| 亚洲精品ady| 在线视频日韩精品| 欧美性猛交xxxx富婆| 亚洲第一福利视频| 久久国产天堂福利天堂| 亚洲美女av电影| 91亚洲精品一区二区| 91热精品视频| 亚洲成人三级在线| 91经典在线视频| 欧美一乱一性一交一视频| 亚洲欧洲美洲在线综合| 亚洲精品欧美一区二区三区| 亚洲自拍偷拍色片视频| 国产999在线观看| 亚洲人成电影网站色| 91在线观看免费高清| 久久琪琪电影院| 久久99久久亚洲国产| 欧美精品亚州精品| 久久久国产精彩视频美女艺术照福利| 国产精品视频久久久| 日韩视频在线免费| 国产精品视频一区国模私拍| 国产日韩在线精品av| 国产精品直播网红| 欧美日韩激情视频8区| 成人写真福利网| 日韩中文字幕国产精品| 久久九九免费视频| 国产精品女主播视频| 97久久精品国产| 久久久久久伊人| 亚洲欧洲国产一区| 国产精品久久婷婷六月丁香| 精品电影在线观看| 国产精品视频区1| 91色琪琪电影亚洲精品久久| 欧美裸体男粗大视频在线观看| 国产视频综合在线| 欧美性色视频在线| 久久在线精品视频| 精品久久久久久电影| 黄色一区二区在线| 国产精品欧美亚洲777777| 国内精品国产三级国产在线专| 欧美日韩视频在线| 欧美日韩国产一区中文午夜| 91久久精品日日躁夜夜躁国产| 亚洲韩国欧洲国产日产av| 国产精品久久久久秋霞鲁丝| 色爱av美腿丝袜综合粉嫩av| 97热在线精品视频在线观看| 日韩精品电影网| 久久精品久久久久电影| 国产99视频在线观看| 国a精品视频大全| 欧美日韩在线视频首页| 日本aⅴ大伊香蕉精品视频| 国产精品香蕉在线观看| 久久久久久久999精品视频| 久久久久久久久久国产| 国外成人性视频| 久久久免费在线观看| 中文字幕亚洲欧美一区二区三区| 一本色道久久88综合日韩精品| 国产一区二区三区久久精品| 欧美性videos高清精品| 91久久中文字幕| 国产成+人+综合+亚洲欧美丁香花| 清纯唯美日韩制服另类| 在线看国产精品| 亚洲欧美制服综合另类| 久久久久久18| 国产精品亚洲片夜色在线| 91精品国产自产在线观看永久| 亚洲免费电影在线观看| 91精品国产乱码久久久久久久久| 午夜精品久久久久久99热| 国产一区二区三区在线观看网站| 欧美视频在线看| 亚洲香蕉在线观看| 国产精品男人爽免费视频1| 欧美黑人国产人伦爽爽爽| 51精品国产黑色丝袜高跟鞋| 精品国产91久久久久久老师| 久久久之久亚州精品露出| 亚洲福利在线视频| 一区三区二区视频| 亚洲国产精品va在线观看黑人| 国产精品久久久久久久9999| 国产亚洲成av人片在线观看桃| 欧美电影免费在线观看| 81精品国产乱码久久久久久| 日韩欧美在线第一页| 欧美午夜精品久久久久久人妖| 亚洲精品狠狠操| 亚洲网址你懂得| 午夜精品视频网站| 中文字幕综合一区| 国产精品丝袜久久久久久高清| 精品久久久久国产| 国产成人精品日本亚洲专区61| 国产福利成人在线| 国产成+人+综合+亚洲欧美丁香花| 久久精品国产91精品亚洲| 久久99久久99精品免观看粉嫩| 日本精品免费一区二区三区| 欧美在线一区二区视频| 国产成人精品一区二区在线| 国产成人涩涩涩视频在线观看| 久久亚洲精品视频| 精品久久久久久久中文字幕| 欧美日韩第一视频| 成人在线视频福利| 亚洲新中文字幕| 亚洲精品视频免费在线观看| 欧美中文字幕在线观看| 中文字幕日韩欧美精品在线观看| 欧美日韩中文在线| 国产精品欧美日韩一区二区| 在线成人中文字幕| 亚洲天天在线日亚洲洲精| 国产精品啪视频| 久久精品国产69国产精品亚洲| 亚州成人av在线| 狠狠躁夜夜躁人人爽超碰91| 色香阁99久久精品久久久| 81精品国产乱码久久久久久| 国产成人一区二| 亚洲天堂av高清| 久久久久中文字幕| 久久国产精品免费视频| 亚洲美女在线视频| 日韩av免费在线播放| 欧美日韩在线视频首页| 国产成人午夜视频网址| 一道本无吗dⅴd在线播放一区| 91精品久久久久久久久久另类| 高清亚洲成在人网站天堂| 欧美在线欧美在线| 欧美极品少妇xxxxx| 久久中文字幕国产| 久久久久国产视频| 中文欧美在线视频| 一区二区三区 在线观看视| 亚洲人成五月天| 亚洲美女视频网| 不卡毛片在线看|