對於排序,對於第一次看計數排序**,則會被陣列的巢狀繞暈,最好的方式就是,將陣列代入,一步一步執行,便能更好的理解**。
計數排序的**為:
package com.dong.counting;
public class counting
} public static void main(string args) ;
int result = new int[5];
countsort(array, 5, result, 10);
for(int i=0;i**的執行結果為:12369
接下來我將一一解釋**,以便於更好的理解:
⑴首先是5-10行**,用來對需要的陣列做初始化工作:
注意:這裡有乙個問題,即temp陣列的大小問題。temp陣列的下標為array陣列的值,所以只要temp陣列的容量大於array陣列的最大值即可。
⑵12-14行**,實現的是在temp陣列中,以array陣列的值為temp陣列的下標,越靠後的**其原始值越大,
⑶16-18行**,用來統計temp中元素的大小,因為這個位置的順序就代表原始陣列的大小順序,所以可以通過temp陣列來統計元素的實際位置
⑷20-23用來根據temp的順序,將排序好的數按順序放入result陣列中:
result[temp[array[j]]-1]=array[j];
temp[array[j]]=temp[array[j]]-1;
對於這兩行**,需要一步一步解析:
array[j]:即原始陣列的第j個值;
temp[array[j]]:即原始數值在陣列中的大小順序;
[temp[array[j]-1]:即因為大小數值是比較的是個數,對於陣列來說,下標從0開始,所以-1;
result[temp[array[j]-1]:代表的是需要在result中儲存array[j]元素的陣列元素;
temp[array[j]] = temp[array[j]]-1:即相當於將已經排序的元素在array陣列中去除,temp陣列的值為去掉排序過的元素的array陣列執行16-18行**的結果,這行**也可以注釋掉。
計數排序的時間複雜度為o(n),空間複雜度也為o(n);
之所以寫這個,是因為計數排序不是通過比較來進行排序的,對於一直學習比較的排序演算法,突然接觸這個排序,有點突然而已。
如有錯誤,敬請指出,謝謝
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個輸出位...