日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

理论基础 —— 排序 —— 基数排序

發(fā)布時間:2025/3/17 编程问答 8 豆豆
生活随笔 收集整理的這篇文章主要介紹了 理论基础 —— 排序 —— 基数排序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【概述】

?基數(shù)排序是一種穩(wěn)定的排序方法,屬于非比較類排序,其基本思想是:將待排序序列分到有限數(shù)量的桶中,每個桶再個別排序。

簡單來說,就是將數(shù)據(jù)分組,放在一個個桶中,然后對每組每個桶再進行排序。

【過程】

例如:要對大小為 [1..1000] 范圍內的 n 個整數(shù) A[1..n] 排序

首先,可以把桶設為大小為 10 的范圍,具體而言,設集合 B[1] 存儲 [1..10] 的整數(shù),集合 B[2] 存儲 ? (10..20] 的整數(shù),……,集合 B[i] 存儲 ((i-1)*10,?i*10] 的整數(shù),i=1,2,..100,總共有 100 個桶。

然后,對 A[1..n] 從頭到尾掃描一遍,把每個 A[i] 放入對應的桶 B[j] 中,再對這 100 個桶中每個桶里的數(shù)字排序,這時可用冒泡,選擇,乃至快排,一般來說任何排序法都可以。

最后,依次輸出每個桶里面的數(shù)字,且每個桶中的數(shù)字從小到大輸出,這樣就得到所有數(shù)字排好序的一個序列了。

【源程序】

int getDigitInPos(int num,int pos){//找到數(shù)字num的從第到高的第pos位數(shù)據(jù)int temp=1; for(int i=0;i<pos-1;i++) temp*=10; return (num/temp)%10; } #define RADIX 10//基數(shù)為10,需要十個桶 #define KEYNUM 10//關鍵字位數(shù),這里為整形位數(shù) void RadixSort(int a[], int n){int *b[RADIX];//分別為0~9基數(shù)的存放空間 for (int i=0;i<10;i++){ b[i]=(int *)malloc(sizeof(int)*(dataNum + 1)); b[i][0]=0;//index為0處記錄這組數(shù)據(jù)的個數(shù) } for(int pos=1;pos<=KEYNUM;pos++){//從個位開始入桶并出桶for(int i=0;i<n;i++){//分配過程 int num=getDigitInPos(a[i],pos); int index=++b[num][0]; b[num][index]=a[i]; } for(int i=0,j=0;i<RADIX;i++){//收集 for(int k=1;k<=radixArrays[i][0];k++) a[j++]=b[i][k]; b[i][0]=0;//出桶完畢,復位 } } }

?

總結

以上是生活随笔為你收集整理的理论基础 —— 排序 —— 基数排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。