当前位置:首页 > Java

java如何快速排序

2026-03-22 07:51:08Java

快速排序实现方法

快速排序(QuickSort)是一种高效的分治算法,平均时间复杂度为 O(n log n)。以下是Java实现的核心步骤和代码示例。

核心逻辑

  1. 选择基准值(Pivot)
    从数组中选择一个元素作为基准值(通常选择第一个、最后一个或中间元素)。

  2. 分区(Partitioning)
    将数组分为两部分:小于基准值的元素移到左侧,大于基准值的元素移到右侧。分区完成后,基准值处于正确的位置。

  3. 递归排序
    对左右子数组递归执行上述步骤,直到子数组长度为1或0。

    java如何快速排序

Java代码实现

public class QuickSort {
    public static void quickSort(int[] arr, int low, int high) {
        if (low < high) {
            int pivotIndex = partition(arr, low, high); // 获取基准值位置
            quickSort(arr, low, pivotIndex - 1);  // 递归排序左子数组
            quickSort(arr, pivotIndex + 1, high); // 递归排序右子数组
        }
    }

    private static int partition(int[] arr, int low, int high) {
        int pivot = arr[high]; // 选择最后一个元素作为基准值
        int i = low - 1;       // i指向小于基准值的区域边界

        for (int j = low; j < high; j++) {
            if (arr[j] < pivot) {
                i++;
                swap(arr, i, j); // 将小于基准值的元素交换到左侧
            }
        }
        swap(arr, i + 1, high);  // 将基准值放到正确位置
        return i + 1;            // 返回基准值索引
    }

    private 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 = {10, 7, 8, 9, 1, 5};
        quickSort(arr, 0, arr.length - 1);
        System.out.println(Arrays.toString(arr)); // 输出排序后的数组
    }
}

关键点说明

  • 基准值选择:示例中选择数组末尾元素作为基准值,但可优化为随机选择或三数取中法以避免最坏情况(如数组已有序时时间复杂度退化为 O(n²))。
  • 分区优化:Lomuto分区方案(如上代码)简单但效率较低;Hoare分区方案(双指针法)通常性能更好。
  • 稳定性:快速排序是不稳定的排序算法,相同元素的相对位置可能改变。

时间复杂度分析

  • 最佳/平均情况O(n log n)
  • 最坏情况(如数组已有序):O(n²),可通过随机化基准值避免。

标签: 快速java
分享给朋友:

相关文章

如何查看java版本

如何查看java版本

查看 Java 版本的方法 通过命令行工具 打开终端(Windows 为命令提示符或 PowerShell,macOS/Linux 为 Terminal),输入以下命令并回车: java -ve…

如何运行java文件

如何运行java文件

运行Java文件的方法 确保已安装Java Development Kit (JDK),可通过命令行输入java -version和javac -version验证安装。 编写Java代码并保存为.…

如何编写java程序

如何编写java程序

安装开发环境 下载并安装JDK(Java Development Kit),推荐从Oracle官网或OpenJDK获取最新版本。安装完成后配置环境变量,确保JAVA_HOME和PATH正确设置。 选…

java如何删除文件

java如何删除文件

删除文件的基本方法 使用 java.io.File 类的 delete() 方法可以删除文件。如果文件存在且删除成功,返回 true;否则返回 false。 import java.io.Fil…

如何选择java培训

如何选择java培训

评估培训机构资质 选择有正规资质的机构,查看其营业执照、办学许可证等。优先考虑具备人力资源和社会保障部或教育部认证的机构,这类机构的教学质量和课程设置通常更规范。 考察课程内容与行业需求匹配度…

java如何实现多继承

java如何实现多继承

在Java中,由于语言设计本身不支持多继承(即一个类不能直接继承多个父类),但可以通过以下方式间接实现类似多继承的效果: 使用接口实现多继承 接口允许一个类实现多个接口,从而继承多个抽象行为。接口中…