經常使用排序算法(八)——計數排序

        若是在面試中有面試官要求你寫一個O(n)時間複雜度的排序算法,你千萬不要馬上說:這不可能!雖然前面基於比較的排序的下限是O(nlogn)。可是確實也有線性時間複雜度的排序,只不過有前提條件,就是待排序的數要知足必定的範圍的整數,並且計數排序須要比較多的輔助空間。其基本思想是,用待排序的數做爲計數數組的下標,統計每一個數字的個數。而後依次輸出便可獲得有序序列。 面試

         實現代碼:

       

public class CountSort { 
	public static void countSort(int[] arr) { 
		if(arr == null || arr.length == 0) 
			return ; 
		
		int max = max(arr); 
		
		int[] count = new int[max+1]; 
		Arrays.fill(count, 0); 
		
		for(int i=0; i) { 
			count[arr[i]] ++; 
		} 
		
		int k = 0; 
		for(int i=0; i) { 
			for(int j=0; j) { 
				arr[k++] = i; 
			} 
		} 
	} 
	public static int max(int[] arr) { 
		int max = Integer.MIN_VALUE; 
		for(int ele : arr) { 
			if(ele > max) max = ele; 
		} 
		
		return max; 
	} 
}
相關文章
相關標籤/搜索