如何利用Java中的数组功能来实现计数排序?
发布时间:2023-07-06 07:19:38
计数排序是一种简单且高效的排序算法,它可以对整数进行排序。它的基本思想是创建一个额外的计数数组,用来存储每个元素出现的次数。然后根据计数数组的内容,重新构建原数组,从而实现排序。
在Java中,我们可以利用数组功能来实现计数排序。下面是具体的实现步骤:
1. 首先,我们需要确定原数组中的最大值和最小值。我们可以遍历一次原数组,使用两个变量max和min来记录最大值和最小值。
int max = array[0];
int min = array[0];
for (int i = 1; i < array.length; i++) {
if (array[i] > max) {
max = array[i];
}
if (array[i] < min) {
min = array[i];
}
}
2. 确定计数数组的大小。计数数组的大小应该等于最大值和最小值之间的差值加1。我们可以使用max和min计算差值。
int countNum = max - min + 1;
3. 创建计数数组。计数数组的长度应该等于计数数组的大小。初始时,计数数组的所有元素都应为0。
int[] countArray = new int[countNum];
4. 遍历原数组,统计每个元素的出现次数。我们可以使用元素值减去最小值,得到元素在计数数组中的索引,然后将对应索引的计数数组元素加1。
for (int i = 0; i < array.length; i++) {
countArray[array[i] - min]++;
}
5. 重新构建原数组。我们可以创建一个新的数组result,遍历计数数组,根据每个元素的出现次数,在新数组中按序填入对应的元素值。
int[] result = new int[array.length];
int index = 0;
for (int i = 0; i < countArray.length; i++) {
while (countArray[i] > 0) {
result[index++] = i + min;
countArray[i]--;
}
}
最后,将新数组result返回,即得到排好序的数组。
完整的Java代码如下:
public class CountingSort {
public static int[] countingSort(int[] array) {
int max = array[0];
int min = array[0];
for (int i = 1; i < array.length; i++) {
if (array[i] > max) {
max = array[i];
}
if (array[i] < min) {
min = array[i];
}
}
int countNum = max - min + 1;
int[] countArray = new int[countNum];
for (int i = 0; i < array.length; i++) {
countArray[array[i] - min]++;
}
int[] result = new int[array.length];
int index = 0;
for (int i = 0; i < countArray.length; i++) {
while (countArray[i] > 0) {
result[index++] = i + min;
countArray[i]--;
}
}
return result;
}
public static void main(String[] args) {
int[] array = {4, 2, 8, 3, 1, 6, 7, 5};
int[] sortedArray = countingSort(array);
for (int num : sortedArray) {
System.out.print(num + " ");
}
}
}
以上就是利用Java中的数组功能实现计数排序的完整步骤和代码。计数排序的时间复杂度为O(n+k),其中n是原数组的长度,k是原数组中的最大值和最小值之差。由于计数排序不涉及元素之间的比较,所以它是一种稳定的排序算法。
