排序演算法之基數排序 桶排序

2021-06-28 21:48:25 字數 931 閱讀 7624

基數排序(radix sort)屬於分配式排序(distribution sort),又稱「桶子法」(bucket sort),顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些「桶」中,藉以達到排序的作用,基數排序法是屬於穩定性的排序,其時間複雜度為o (nlog(r)m),其中r為所採取的基數,而m為堆數,在某些時候,基數排序法的效率高於其它的穩定性排序法。

它是怎麼排序的呢?我們可以按照下面的一組數字做出說明:12、 104、 13、 7、 9

(1)按個位數排序是12、13、104、7、9

(2)再根據十位排序104、7、9、12、13

(3)再根據百位排序7、9、12、13、104

這裡注意,如果在某一位的數字相同,那麼排序結果要根據上一輪的陣列確定,舉個例子來說:07和09在十分位都是0,但是上一輪排序的時候09是排在07後面的;同樣舉乙個例子,12和13在十分位都是1,但是由於上一輪12是排在13前面,所以在十分位排序的時候,12也要排在13前面。

所以,一般來說,10基數排序的演算法應該是這樣的?

(1)判斷資料在各位的大小,排列資料;

(2)根據1的結果,判斷資料在十分位的大小,排列資料。如果資料在這個位置的餘數相同,那麼資料之間的順序根據上一輪的排列順序確定;

(3)依次類推,繼續判斷資料在百分位、千分位......上面的資料重新排序,直到所有的資料在某一分位上資料都為0。

**實現:

//基數排序

void bucketsort(int *p,int n)

return max;

}//將數字分配到桶中,然後按照桶的順序輸出排序結果

void sort(int *p,int n,int loop)

; //求桶的index

int tempnum = (int)pow(10,loop-1);

int i,j;

for(i=0;i

排序演算法 基數排序(桶排序)

基數排序 公升序 是一種非比較式的排序方式,和之前博文中提到的快排,氣泡排序,插入排序這些排序演算法不一樣,它沒有使用任何交換的方式,那麼又是通過什麼方式進行的排序呢?它的基本思想是通過分配的方法把元素從小到大分配,以到達排序的作用。1.建立10個桶,分別用來放對應的數字 2.按照最低位 個位 的數...

基數排序(桶排序)

1。什麼是基數排序 radix sort 基數排序 屬於分配式排序 distribution sort 又稱 桶排序 bucket sort 它是通過鍵值的各個位的值,將要排序的元素分配至某些 桶 中,達到排序的作用。2.它和歸併一樣,屬於穩定型演算法。public void radixsort i...

基數排序(桶排序)

思想 先把這組資料的個位排有序,再把十位排有序,再排百位 千位 include include include include void showarr int arr,int len printf n int getmaxnumfin int arr,int len 找陣列中最大數,並求出最大數的...