排序 基數排序

2021-06-23 06:49:16 字數 1522 閱讀 4966

基數排序(radix sort)是屬於「分配式排序」(distribution sort),基數排序法又稱「桶子法」(bucket sort)或bin sort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些「桶」中,藉以達到排序的作用。

排序思想:

首先按照資料的最低位(個位)將資料分配到0~9十個桶中,然後依次將這些桶中的資料取出來得到按照個位排序後的結果,然後再將排過序的資料按照次低位(十位)將資料分配到0~9十個桶中,依次類推,直到資料都變為有序的序列。

這裡舉乙個簡單的例子來說明一下:

假設有資料:12, 23, 22, 14需要排序(這裡只用到4個桶,所以只寫出兩個桶的資料)

第一次:

2: 12, 22    

3: 23

4: 14

得到排好序的資料為:12, 22, 23, 14

第二次:

1: 12, 14

2: 22, 23

得到排序後的資料為:12, 14, 22, 23

分析:在按個位排完序之後十位相同的數的順序已經排好了,按照十位排完序之後,百位相同的資料順序已經排好了。

程式的**如下:

#include #include #include void print(int dat, int len)

void radix_sort(int a, int len)

; int i, k, flag;

int divider = 1;

dofor(i=0, k=0; i < 10*len; i++) /*從桶中取出拍好一次序的資料*/

if(b[i]) a[k++] = b[i];

printf("中間值:");

print(a, len);

divider *= 10; /*按個位排完序之後按十位排,依次類推...*/

}while(flag);

free(b);

}int main();

printf("初始值:");

print(a, sizeof(a)/sizeof(int));

radix_sort(a, sizeof(a)/sizeof(int));

printf("排序後:");

print(a, sizeof(a)/sizeof(int));

return 0;

}

程式執行結果截圖:

基數排序的特點:

穩定性:穩定

基數排序和通常的排序演算法並不走同樣的路線。它是一種比較新穎的演算法,但是它只能用於整數的排序,如果我們要把同樣的辦法運用到浮點數上,我們必須了解浮點數的儲存格式,並通過特殊的方式將浮點數對映到整數上,然後再對映回去,這是非常麻煩的事情,因此,它的使用同樣也不多。而且,最重要的是,這樣演算法也需要較多的儲存空間。另外,基數排序(桶排序)在處理多關鍵字,比如撲克排序(花色有大小,點數也有大小的情況)會使問題變得非常簡單。

排序 基數排序

1 基數排序 桶排序 介紹 1 基數排序 radix sort 屬於 分配式排序 distribution sort 又稱 桶子法 bucket sort 或bin sort,顧名思義,它是通過鍵值的各個位的值,將要排序的元素分配至某些 桶 中,達到排序的作用 2 基數排序法是屬於穩定性的排序,基數...

桶排序 基數排序 計數基數排序 Java

前面已經講述了很多排序演算法,但是他們的排序演算法都是基於兩個值之間的比較,通過決策樹的方法可以證明深度為d的二叉樹則最多有 一些好的排序演算法是可以達到時間複雜度是線性的,桶排序就是其中一種。比如有n個數,但是這些數的最大數不超過m。這個時候就可以定義乙個含有m個元素的陣列 初始值為0 然後遍歷n...

計數排序 基數排序

一.計數排序 counting sort 基本思想 對每乙個輸入元素x,確定出小於x的元素個數。適用範圍 適用於輸入是由小範圍的整數構成的序列。穩定性 演算法是穩定的。具體實現 include using namespace std arr 初始輸入陣列,res 存放排序結果的陣列,hash臨時儲存...