java代码实现count排序_java计数排序
介紹: 該算法不基于比較進行排序,時間復雜度O(n + k),很難說與基于比較的排序算法(時間復雜度下限O(nlogn))哪個更優,具體要比較k與nlogn的大小;
實現思路:
1.以數組originArr中最大值max構建一個長度為max+1的數組countArr,以originArr中的元素為countArr數組的索引(index),以該元素在originArr數組中出現的次數為countArr數組index對應的value;
2.構建一個長度為originArr.length的數組resultArr來保存排好序的元素;
3.遍歷countArr數組,找到countArr[index]的元素,一次將他們添加到resultArr中,如果countArr[index]大于0,例如countArr[index]==3,那么想resultArr添加index(也即是originArr的元素)3次;
代碼實現:
public static void main(String[] args) {
int[] arr = initIntArr();
int[] resultArr = countSort(arr);
List list = Lists.newArrayList();
for (int i : resultArr) {
list.add(i);
}
String str = list.stream().map(x -> x + "").collect(Collectors.joining(","));
System.out.println(str);
}
public static int findMax(@NonNull int[] arr) {
for (int i = 0; i < (arr.length - 1); i++) {
int temp = arr[i + 1];
if (arr[i] > arr[i + 1]) {
arr[i + 1] = arr[i];
arr[i] = temp;
}
}
return arr[arr.length - 1];
}
public static int[] initIntArr() {
int[] arr = {2,3,1,5,4,6,9,7,8,0,11,15,10};
return arr;
}
public static int[] countSort(int[] arr) {
int max = findMax(arr);
int[] countArr = new int[max + 1];
int[] resultArr = new int[arr.length];
for (int i : arr) {
++countArr[i];
}
int i = 0, j = 0;
while (i
if (countArr[i] > 0) {
for (int z = 0; z < countArr[i]; z++) {
resultArr[j++] = i;
}
}
i++;
}
return resultArr;
}
總結
以上是生活随笔為你收集整理的java代码实现count排序_java计数排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java jms消息删除_activem
- 下一篇: java如何恢复成eclipse项目,清