欢迎访问宙启技术站
智能推送

如何利用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是原数组中的最大值和最小值之差。由于计数排序不涉及元素之间的比较,所以它是一种稳定的排序算法。