当前位置:首页 > Java > 正文

Java快速排序详解(从零开始掌握快速排序算法)

在编程世界中,排序算法是基础且重要的内容。而快速排序(Quick Sort)因其高效、简洁而被广泛使用。本教程将带你一步步理解并用Java语言实现快速排序,即使你是编程小白,也能轻松掌握!

什么是快速排序?

快速排序是一种分治算法(Divide and Conquer)。它的基本思想是:选择一个“基准”(pivot)元素,将数组分为两部分——一部分比基准小,另一部分比基准大,然后递归地对这两部分进行排序。

Java快速排序详解(从零开始掌握快速排序算法) Java快速排序 快速排序算法 Java排序教程 快速排序实现 第1张

快速排序的步骤

  1. 从数组中选择一个元素作为基准(通常选第一个、最后一个或中间元素)。
  2. 重新排列数组,使得所有比基准小的元素放在基准前面,所有比基准大的元素放在基准后面(这个过程叫分区)。
  3. 递归地对基准左边和右边的子数组进行快速排序。

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);        }    }    // 分区方法:以最后一个元素为基准    public static int partition(int[] arr, int low, int high) {        int pivot = arr[high]; // 选择最后一个元素作为基准        int i = low - 1; // 小于基准的元素的索引        for (int j = low; j < high; j++) {            if (arr[j] <= pivot) {                i++;                swap(arr, i, j);            }        }        swap(arr, i + 1, high);        return i + 1;    }    // 交换两个元素    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 = {10, 7, 8, 9, 1, 5};        System.out.println("排序前:");        printArray(arr);                quickSort(arr, 0, arr.length - 1);                System.out.println("排序后:");        printArray(arr);    }    // 打印数组    public static void printArray(int[] arr) {        for (int value : arr) {            System.out.print(value + " ");        }        System.out.println();    }}

代码解析

  • quickSort 方法是递归入口,控制排序范围。
  • partition 方法负责将数组分区,并返回基准元素的最终位置。
  • swap 方法用于交换数组中的两个元素。

时间复杂度分析

- 最好情况:每次分区都能平均分割,时间复杂度为 O(n log n)。
- 最坏情况:每次选到最大或最小元素作基准,退化为 O(n²)。
- 平均情况:O(n log n),这也是快速排序被广泛使用的原因。

总结

通过本教程,你已经学会了如何用Java语言实现快速排序算法。无论你是准备面试,还是学习数据结构,掌握快速排序都是非常有价值的。记住,多练习才能真正掌握!

关键词回顾:Java快速排序快速排序算法Java排序教程快速排序实现