龙空技术网

Java计数排序算法(技术每天进步一点)

安航工业 85

前言:

眼前朋友们对“java sort排序算法”都比较讲究,小伙伴们都想要学习一些“java sort排序算法”的相关文章。那么小编在网摘上汇集了一些关于“java sort排序算法””的相关内容,希望各位老铁们能喜欢,兄弟们一起来了解一下吧!

计数排序(Counting Sort)是一种非比较排序算法,它的核心思想是利用数组中每个元素出现的次数来确定该元素在排序后的位置。以下是Java语言实现计数排序的算法:

public static void countingSort(int[] arr) {    int n = arr.length;    if (n <= 1) {        return;    }    // 找到数组中的最大值    int maxVal = arr[0];    for (int i = 1; i < n; i++) {        if (arr[i] > maxVal) {            maxVal = arr[i];        }    }    // 创建计数数组,大小为最大值加1    int[] count = new int[maxVal + 1];    // 统计每个元素出现的次数    for (int i = 0; i < n; i++) {        count[arr[i]]++;    }    // 计算每个元素在排序后的数组中的位置    for (int i = 1; i <= maxVal; i++) {        count[i] += count[i - 1];    }    // 创建排序后的数组,大小与原数组相同    int[] sortedArr = new int[n];    // 将每个元素放到排序后的数组中的正确位置上    for (int i = n - 1; i >= 0; i--) {        // 将元素放到排序后的数组中        sortedArr[count[arr[i]] - 1] = arr[i];        // 更新计数数组中该元素的出现次数          count[arr[i]]--;    }    // 将排序后的数组复制回原数组    System.arraycopy(sortedArr, 0, arr, 0, n);}

上述代码中,首先遍历数组,找出数组中最大的元素值,然后创建一个计数数组count,其大小为最大元素值加1。遍历原数组,统计每个元素出现的次数,并在计数数组中累加。接下来,从后向前遍历原数组,将每个元素放到排序后的数组中的正确位置上,并在计数数组中将该元素的出现次数减1。最后将排序后的数组复制回原数组即可。

计数排序的时间复杂度为O(n+k),其中n为数组长度,k为最大元素值。由于计数排序的时间复杂度与数组长度和最大元素值都有关,因此在实际应用中,当最大元素值很大时,计数排序的效率可能会较低。

标签: #java sort排序算法