二叉樹面試題
1)計數排序不是一個基于比較的排序算法。它是用一個數組來統計每種數字出現的次數,然后按照大小順序將其依次放回原數組。但是計數排序有一個很嚴重的問題,就是其只能對整數進行排序,一旦遇到字符串時,就無能為力了。
第一步:找出原始數組【0,2,5,3,7,9,10,3,7,6】中元素值最大的,記為max=10。
第二步:創建一個計數數組count,數組長度是max值加1,其元素默認值都為0。
第三步:遍歷原始數組中的元素,以原始數組中的元素作為計數數組count的索引,以原始數組中的元素出現次數作為計數數組count的元素值。下圖可以得到原始數組【0,2,5,3,7,9,10,3,7,6】中元素0出現1次,元素2出現1次,元素3出現2次,元素5出現1次,元素6出現1次,元素7出現2次,元素9出現1次,元素10出現1次。
第四步:遍歷計數數組count,找出其中元素值大于0的元素,將其對應的索引作為元素值填充到結果數組result中去,每處理一次,計數數組count中的該元素值減1,直到該元素值不大于0,依次處理計數數組count中剩下的元素。
public static void countSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
int max = Integer.MIN_VALUE;
for (int i = 0; i < arr.length; i++) {
max = Math.max(max, arr[i]);
}
int[] bucket = new int[max + 1];
for (int i = 0; i < arr.length; i++) {
bucket[arr[i]]++;
}
int i = 0;
for (int j = 0; j < bucket.length; j++) {
while (bucket[j]-- > 0) {
arr[i++] = j;
}
}
}