📌  相关文章
📜  用于对 0、1 和 2 的数组进行排序的Java程序(1)

📅  最后修改于: 2023-12-03 14:56:20.517000             🧑  作者: Mango

用于对 0、1 和 2 的数组进行排序的Java程序

在本篇文章中,我们将介绍一个用于对 0、1 和 2 数组进行排序的Java程序。该程序采用三路快排的算法实现,时间复杂度为O(n)。

代码实现
public class SortColors {
    public void sortColors(int[] nums) {
        int left = 0, right = nums.length - 1;
        int i = 0;
        while (i <= right) {
            if (nums[i] == 0) {
                swap(nums, i, left);
                left++;
                i++;
            } else if (nums[i] == 2) {
                swap(nums, i, right);
                right--;
            } else {
                i++;
            }
        }
    }

    private void swap(int[] nums, int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
}
代码说明

该程序中的sortColors方法采用了三路快排的思想。程序中的left指针指向数组中下一个应该存储0的位置,right指针指向数组中下一个应该存储2的位置。i指针从左到右扫描整个数组。

当扫描到0时,交换nums[i]和nums[left]的值,同时将left指针向右移动一个位置,以便存储下一个0。

当扫描到2时,交换nums[i]和nums[right]的值,同时将right指针向左移动一个位置,以便存储下一个2。

当扫描到1时,i指针向右移动一个位置,继续扫描整个数组。

经过一次扫描后,整个数组就被排好序了。

总结

本篇文章介绍了一个用于对 0、1 和 2 数组进行排序的Java程序,该程序采用了三路快排的算法实现,时间复杂度为O(n)。程序中的sortColors方法通过左右指针和扫描指针,确保在一次遍历中完成排序。