基數排序就這麼簡單

2022-05-03 04:36:07 字數 2554 閱讀 6839

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

從上面的簡單介紹,是並不了解基數排序是怎麼弄的~基數排序不同與其他的7種排序,其他7種排序本質上都是按照交換或者比較來進行排序,但是基數排序並不是,它是按照分配,**(分配到不同的位置上,然後**)..不斷分配..**來進行排序,直到有序..

聽上去好像很高大上,很難的樣子,其實不然。基數排序挺簡單的,下面我就來看一下基數排序的流程....

我們有9個桶,將陣列的數字按照數值分配桶中:

ps:**於網路,侵刪

上面我們發現:如果將桶按順序進行**,那麼我們的排序就完成了~

可是,一般我們的陣列元素都不僅僅是個位數的數字的呀,那麼高位數的數字又怎麼弄呢??比如:23,44,511,6234這些高位數..

其實也是一樣的:

ps:**於網路,侵刪

機智的同學可能就會發現了,關於這個桶我們可以用二維陣列來進行存放。

10個桶子就是10列,如果分配時有的數字相同的話,那麼就弄成多行~

首先我們有以下這個陣列:

int arrays = ;
現在我們有10個桶子,每個桶子下能裝載arrays.length個數字..

int buckets = new int[arrays.length][10];
效果如下:01

2345

6789

將陣列的每個個位數進行分配到不同的桶子上:01

2345

6789

64322

432344

55分配完之後,我們按照順序來進行**:得到的結果應該是這樣子的:

將陣列的每個十位數進行分配到不同的桶子上(像6這樣的數,往前邊補0):

於是我們可以得到這樣的排序:01

2345

6789

64322

432344

55分配完之後,我們按照順序來進行**:得到的結果應該是這樣子的:

將陣列的每個百位數進行分配到不同的桶子上(像6、55這樣的數,往前邊補0):

於是我們可以得到這樣的排序:01

2345

6789

6554322

432344

分配完之後,我們按照順序來進行**:得到的結果應該是這樣子的:

將陣列的每個百位數進行分配到不同的桶子上(像6、55,344,432這樣的數,往前邊補0):

於是我們可以得到這樣的排序:01

2345

6789

655344432

4322

分配完之後,我們按照順序來進行**:得到的結果應該是這樣子的:

此時我們的陣列就已經可以排好序了~~~過程就是這樣子,其實不難就只有兩個步驟:

我們的基數排序是按照個、十、百、千位...來進行存放的。前面的演示是已經知道陣列元素的資料的情況下來進行存放,但是一般我們是不去理會陣列內元素的值的。那如果位數很多(萬位)或者都是個位數,這個條件我們怎麼去處理呢?

我們可以這樣做:先求出陣列最大的值,然後不斷/10,只要它能大於0,那麼它的位數還有~

這個我在前面寫遞迴的時候就有這個**了,我就直接搬去遞迴的**過來了,順便複習一哈吧:

/**

* 遞迴,找出陣列最大的值

* @param arrays 陣列

* @param l 左邊界,第乙個數

* @param r 右邊界,陣列的長度

* @return

*/public static int findmax(int arrays, int l, int r) else else

}

public static void radixsort(int arrays) 

//**桶子裡的元素

int k = 0;

//有10個桶子

for (int j = 0; j < 10; j++) }}

}}

搞了一堆數測試了一哈:

基數排序(桶排序)要理解起來並不困難,不過值得注意的是:基數排序對有負數和0的數列難以進行排序

基數排序的要點就兩個:

基數排序就這麼簡單

基數排序 radix sort 屬於 分配式排序 distribution sort 又稱 桶子法 bucket sort 或bin sort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些 桶 中,藉以達到排序的作用,基數排序法是屬於穩定性的排序,其時間複雜度為o nlog r m 其...

基數排序就這麼簡單

基數排序 radix sort 屬於 分配式排序 distribution sort 又稱 桶子法 bucket sort 或bin sort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些 桶 中,藉以達到排序的作用,基數排序法是屬於穩定性的排序,其時間複雜度為o nlog r m 其...

氣泡排序就這麼簡單

在我大一的時候自學c語言和資料結構,我當時就接觸到了氣泡排序 當時使用的是c語言編寫的 現在大三了,想要在暑假找到乙份實習的工作,又要回顧一下資料結構與演算法的知識點了。排序對我們來說是一點也不陌生了,當你打王者榮耀的時候也會有段位之分,當你打dota的時候也有天梯分。從高往下數,這個排名是有規律的...