計數排序——Counting Sort
一、簡介
1954年提出,是一個不需要比較的,類似於桶排序的線性時間排序算法。該算法是對於已知數量範圍的數組進行排序。時間復雜度為O (n),適用於小範圍集合的排
序。計數排序是用來排序0到100之間的數 字的最好的算法。
二、基本思想
對於給定的輸入序列中的每一個元素x,確定該序列中值小於x的元素的個數。一旦有了這個信息就可以直接將x存放到正確的位置上。我們可以使用一個數組C,用來記錄
記錄要排序數組中對應記錄出現的個數。
eg:要排序的數組A= {1,1,1,1,0,0,3}
這裏邊最大的數為3,最小為0,那麽我們創建一個長度為4的數組C掃描一遍數組A,將其要排序的數據個數記錄在數組C中,如C[3]= 1,c[0] = 2,這樣,我們根據數組c
將,數據寫入數組B,數據1,分別寫入B[0]B[1]B[2]B[3],3寫入B[6]。最後數組B內的數據為排序好的結果。
三、代碼
public static int[] sort(int[] A,int num)
{
int[] B = new int[num];
int[] C = new int[100];
for(int i=0;i<num;i++)
{
C[A[i]]++;
}
for(int i = 1;i<100;i++)
{
C[i] = C[i]+C[i-1];
}
for(int i = A.length-1;i>=0;i--)
{
B[(C[A[i]]-1)] = A[i];
C[A[i]]--;
}
return B;
}
}
計數排序——Counting Sort