計數排序 legend

2021-06-22 05:16:59 字數 1885 閱讀 7316

計數排序:

(1)計算排序簡介 :

(2)思想 :

(3)**實現 :

(4)適用於 :

--------------------------

(1)計算排序簡介 :

時間複雜度o(n+range),空間複雜度o(range);具有穩定性;

計數排序演算法沒有用到元素間的比較,它利用元素的實際值來確定它們在輸出陣列中的位置。因此,計數排序演算法不是乙個基於比較的排序演算法,從而它的計算時間下界不再是ω(nlogn)。

(2)思想 :

已知乙個元素範圍在0~range的陣列array,給該陣列排序;

則通過建立乙個countarray[range+1];

長度為max+1;這樣下標才會是0~range;初始化元素均為0;

array元素的值對應countarray陣列元素的下標;

countarray元素的值為array中值為該下標的元素出現的次數。

然後將countarray中的非0元素的下標賦給array陣列元素即可。

(2-1)步驟:

1)建立乙個rangearray,陣列大小為待排序的sortarray陣列的範圍;

2)初始化rangearray的每個元素的值為0,然後每個元素的下標為sortarray的值,然後元素值為下標出現的個數;

3)遍歷rangearray,累加,使得每個元素的值為排序好的sortarray中對應元素的位置;

4)建立乙個臨時陣列sortedarray,來儲存排序好的元素;

5)從後往前遍歷sortarray陣列,根據sortarray[i]的值得到rangearray[ sortarray[i] ]的位置;然後將相應的值存到sortedarray[ 位置]中;

6)將sortedarray陣列複製給sortarray陣列;

(3)**實現 :

/*輸入: 待排序的陣列sortarray,length,最大元素maxelement;

輸出: 排序好的陣列sortarray;

*/void countsort(int * sortarray,int length , int maxelement )/*初始化*/

for( i=0;icountarray[ sortarray[i] ]++;

}/*countarray[i]記錄的是sortarray中值為i

的元素出現的次數。

*/for(i=1;i<=maxelement;i++)

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

for(i=0;idelete countarray;

countarray=null;

delete sortedarray;

sortedarray=null;

(4)適用於 :

1). 0~range之間的自然數的排序或者ascii 碼中字元的排序。

2).優化儲存空間 :

如果說排序的數是1234,1235,1256,1267.

那麼countarray的空間要開闢1267個。

這樣顯然很浪費記憶體。

解決方案 :對於排序的數的範圍不是0~range,則初始時sortarray中每個

元素減去minelement,使其範圍是0~range.

程式結束時,sortedarray中的每個元素再加上minelement即可。

所以 : countarray開闢的空間是maxelement-minelement+1;

這樣下標的範圍就是0~maxelement-minelement;

3)擴充套件 :

如果陣列中有負數,則可以找出最小的那個負數,然後

初始時將sortarray陣列的每個元素加上最小負數的絕對值,

使其範圍在0~range,

程式結束時,每個元素再減去最小負數的絕對值即可。

python計數排序 Python 計數排序

1.python coding utf 8 def counting sort a,b,k 計數排序,偽碼如下 counting sort a,b,k 1 for i 0 to k 初始化儲存區的值 2 do c i 0 3 for j 1 to length a 為各值計數 4 do c a j ...

排序 計數排序

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

排序 計數排序

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