日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

java代码实现count排序_java计数排序

發布時間:2023/11/27 生活经验 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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计数排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。