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

2021-09-13 13:19:44 字數 1404 閱讀 7276

前面已經講述了很多排序演算法,但是他們的排序演算法都是基於兩個值之間的比較,通過決策樹的方法可以證明深度為d的二叉樹則最多有

一些好的排序演算法是可以達到時間複雜度是線性的,桶排序就是其中一種。比如有n個數,但是這些數的最大數不超過m。這個時候就可以定義乙個含有m個元素的陣列(初始值為0),然後遍歷n個數,在m的相應位置進行+1的操作。然後在遍歷輸出m中不為0的值的位置就可以了。

程式:

public class bucketsort 

} }public static void main(string args) ;

sort.sort(nums);

for(int i = 0;i基數排序也叫卡片排序,當陣列中的數字較大的時候,這個時候我們就不能用桶排序了,那樣會浪費太多的儲存空間。但是可以利用多次的桶排序,因為每個字元都是用ascii編碼的,範圍是0-256。可以利用乙個位置乙個位置的進行迴圈排序,比如共三位數,那麼第一次就進行個位上數字的排序,排序後得到個位上有序的陣列,然後在此基礎上進行十位上數字的排序,最後進行百位數字上的排序,則最後得到的結果就是整個陣列有序的排列。這樣的時間複雜度為o(p(n+b))p是躺數,n是待排序元素的個數,b是桶的個數。下面以字元排序(等長的字元)為例示範:

public void charactersort(string arr,int length)

//進行每個字元的遍歷

for(int i = length-1;i>=0;i--)

//要對這個temp進行清空

temp.clear();

}}

}

計數基數排序是基數排序的另一種實現方法,該方法避免使用了arraylist陣列。採用了對比某個元素小的值有幾個的計數方式進行排序。需要乙個臨時陣列in,進行排序過程中排序後的陣列的記錄,還需要個count陣列進行數值的記錄,比如count[k]的代表的就是嚴格比k小的元素的個數。然後根據這個個數對資料進行遍歷的排序。一般的,計數基數排序要比基數排序的速度要快。**:

public void countingbucketsort(string arr,int length) 

//進行計數的統計

for(int j = 1;j<=buckets;j++)

//統計後就得到了字串在改位置的順序,只需要根據count找到自己的位置就行

for(int j = 0;j

//要進行陣列的變換,

string tmp = in;

//in就保持上個排序後的字串的順序

in = out;

//out就代表將要進行的

out = tmp;

} //如果是偶數次比較,那麼此時的out的引用就是arr。奇數次要進行替換

if(length% 2 == 1)

} }

桶排序 基數排序 計數排序

桶排序 1.原理 將需要排序的陣列分在有限的桶裡 然後對每個桶中的數分別排序 對每個桶的操作 1.別的排序演算法 2.以遞迴的方式繼續使用桶排序 2.過程 假設待排序的一組數統一的分布在乙個範圍中,並將這一範圍劃分成幾個子範圍,也就是桶 將待排序的一組數,分檔規入這些子桶,並將桶中的資料進行排序 將...

排序 基數排序(計數排序 桶排序)

在此對於桶排序做出兩種方法 一.簡化版桶排序 如下 簡化版的桶排序 include int main scanf d n 輸入乙個數n,表示接下來有n個數 for i 1 i n i 迴圈讀入n個數,並進行桶排序 for i 0 i 1000 i 依次判斷編號1000 0的桶 getchar get...

基數排序(桶排序)

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