排序專題4 計數排序

2021-09-08 08:18:45 字數 850 閱讀 7135

(1)基於比較的排序

基於比較的排序有很多 如:插入排序、選擇排序、選擇排序、歸併排序

基於非比較的排序 如:基數排序、桶排序、計數排序

對於n個待排序元素,在未比較時,可能的正確結果有n!種。 

在經過一次比較後,其中兩個元素的順序被確定,所以可能的正確結果剩餘n!/2種(確定之前兩個元素的前後位置的情況是相同,確定之後相當於少了一半的可能性)。 

依次類推,直到經過m次比較,剩餘可能性n!/(2^m)種。 

直到n!/(2^m)<=1時,結果只剩餘一種。根據斯特靈公式,此時的比較次數m為o(nlogn)次。 

所以基於排序的比較演算法,最優情況下,複雜度是o(nlogn)的。

基於非比較的演算法 時間複雜度是o(n)但是 需要滿足一定的條件,以下分別說明。

計數排序:

計數排序需要占用大量空間,它僅適用於資料比較集中的情況。比如 [0~100],[10000~19999] 這樣的資料。

public class main ;

countingsort(a);

// for (int i = 0; i < a.length; i++)

// system.out.println(a[index]);

}public static void countingsort(int a)

}// system.out.println(max);

// system.out.println(min);

int length = max -min +1;//需要空間的大小

int arr = new int[length];

for (int i = 0; i 基數排序和桶排序以後再進行說明

演算法(4)計數排序

計數排序不需要進行比較 說實話,看到這句話的時候,我也是挺懵的,不比較怎麼進行排序啊!所以計數排序是有一定限制的。首先,計數排序必須是整數,範圍為 0,max 個人覺得這裡的max其實也隱含了乙個比較的過程 想法是這樣的,陣列中的元素按大小排前面有幾個,就把該元素放在新陣列相應的位置。計數排序的操作...

排序 計數排序

資料結構和演算法系列目錄 不斷更新 計數排序是一種線性時間的排序,它的時間複雜程度為o n 雖然是線性的時間複雜程度,但是它的空間複雜程度比較高,而且用之前需要有乙個硬性的前提。這個前提在後面給出,這裡先來簡單介紹一下計數排序。計數排序是先掃瞄一邊待排序陣列,並用乙個輔助陣列記錄待排序每個元素應該在...

排序 計數排序

計數排序假設n個輸入元素中的每乙個都是在0到k區間內的乙個整數,其中k為某個整數。當k o n 時,排序的執行時間為 n 計數排序的基本思想是 對每乙個輸入元素x,確定小於x的元素個數。利用這一資訊,就可以直接把x放到它在輸出陣列中的位置上了。例如,如果有17個元素小於x,則x就應該在第18個輸出位...