有重复元素的快速排序

当涉及到处理重复元素的快速排序时,可以使用荷兰国旗问题的方法,也就是三路划分。下面是使用 Java 实现的示例代码:

java 复制代码
import java.util.Arrays;

public class QuickSort {

    public static void quickSort(int[] arr, int low, int high) {
        if (low < high) {
            int[] pivotIndices = partition(arr, low, high);
            quickSort(arr, low, pivotIndices[0] - 1);
            quickSort(arr, pivotIndices[1] + 1, high);
        }
    }

    public static int[] partition(int[] arr, int low, int high) {
        int pivot = arr[low];
        int smaller = low;
        int equal = low;
        int larger = high;

        while (equal <= larger) {
            if (arr[equal] < pivot) {
                swap(arr, smaller, equal);
                smaller++;
                equal++;
            } else if (arr[equal] == pivot) {
                equal++;
            } else {
                swap(arr, equal, larger);
                larger--;
            }
        }

        return new int[]{smaller, larger};
    }

    public static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    public static void main(String[] args) {
        int[] arr = {3, 6, 8, 2, 3, 8, 4, 6, 3, 2};
        System.out.println("Original Array: " + Arrays.toString(arr));
        quickSort(arr, 0, arr.length - 1);
        System.out.println("Sorted Array: " + Arrays.toString(arr));
    }
}

这段代码实现了一个快速排序算法,其中的 quickSort 方法用于递归地进行排序,partition 方法用于进行三路划分(小于、等于和大于 pivot)。在 main 方法中,展示了如何使用这个快速排序算法对含有重复元素的数组进行排序。

运行此 Java 代码将对数组进行排序,并保持重复元素的相对顺序。

相关推荐
程序员黑豆1 小时前
Java类型推断完全指南:从var到菱形运算符,掌握使用限制与最佳实践
java·前端·ai编程
GreenTea2 小时前
深度解读 Anthropic 多智能体报告:更强的模型 ≠ 更好的协调
前端·后端·算法
风流 少年2 小时前
Spring AI 2.0:Memory
java·后端·spring
码匠许师傅2 小时前
【C++ 面试真题】聊聊 C++ 的移动语义与右值引用
java·c++·面试
小席是个热心肠3 小时前
AI相关的自我学习
java·人工智能·学习
fqq33 小时前
力扣刷题前置Java语法
算法·leetcode·职场和发展
数智化管理手记5 小时前
海量数据如何沉淀有效数据资产?数据标准化治理方案如何搭建?
java·大数据·人工智能
2501_906565125 小时前
数学之美探究
算法
oier_Asad.Chen6 小时前
【洛谷题解/AcWing题解/OI学习笔记】洛谷P2868【USACO07DEC】Sightseeing Cows G(01分数规划求最大比率)
算法·图论·spfa·二分·负环
cfm_29146 小时前
SpringAI + Ollama 本地大模型
java·开发语言·人工智能·语言模型