標籤:round 計數排序 lines toggle outline idt auto question 數組元素排序
計數排序 第10節 計數排序練習題
對於一個int數組,請編寫一個計數排序演算法,對數組元素排序。
給定一個int數組A及數組的大小n,請返回排序後的數組。
測試範例:
[1,2,3,5,2,3],6
[1,2,2,3,3,5]
Java (javac 1.7)代碼自動補全 1
import java.util.*;
2
3
public class CountingSort {4
public int[] countingSort(int[] A, int n) {5
countingSort(A);
6
return A;
7
}
8
9
public void countingSort(int[] arr) {10
int[] tempArr = new int[arr.length];// 臨時數組
11
int[] timesArr;// 統計每個元素出現的次數,放入到對應的桶中
12
int range;// 統計這一組的範圍,得出需要多少個桶
13
int max = arr[0];
14
int min = arr[0];
15
for (int a : arr) {16
if (a > max)
17
max = a;
18
if (a < min)
19
min = a;
20
}
21
range = max - min + 1;// 得出極值差,為了減小臨時數組(統計各元素出現的次數)的長度
22
timesArr = new int[range];
23
24
for (int i = 0; i < arr.length; i++) {25
timesArr[arr[i] - min]++;
26
}
27
for (int i = 1; i < timesArr.length; i++) {// 得到所有元素的大小上的總體順序28
timesArr[i] += timesArr[i - 1];
29
}
30
for (int i = 0; i < arr.length; i++) {// 將arr中元素的位置順序對應到臨時數組中31
int position = timesArr[arr[i] - min];// 得到arr[i]這個元素在整體上的位置
32
tempArr[--position] = arr[i];// 根據上面的位置,將該元素放入到臨時數組中
33
timesArr[arr[i] - min]--;
34
}
35
for (int i = 0; i < arr.length; i++) {36
arr[i] = tempArr[i];
37
}
38
}
39
}
您的代碼已儲存
答案正確:恭喜!您提交的程式通過了所有的測試案例
演算法-java代碼實現計數排序