魔术桌
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • Algorithm - 排序 - 快速排序

文章摘要: 快速排序是一种高效的排序算法,采用分治法的一个典例。

简介

简要说明

  • 快速排序是一种高效的排序算法,采用分治法的一个典例。
  • 通过选取一个“基准”元素,将数组分为两个子数组,一个包含小于基准的元素,另一个包含大于基准的元素,然后递归地对这两个子数组进行快速排序。

主要功能

  • 对数组进行就地排序,不需要额外的存储空间。
  • 通过递归将大问题分解为小问题,并合并结果。

注意事项

  • 快速排序在最坏情况下的时间复杂度为O(n^2),但通常情况下平均时间复杂度为O(n log n)。
  • 选择合适的基准(pivot)对于算法的性能至关重要。
  • 快速排序是不稳定的排序算法,相等的元素可能会因为排序而改变它们的相对顺序。

适用场景

  • 适用于大量数据的排序,尤其是当内存空间有限时。
  • 当数据不能全部载入内存时,可以考虑使用外部排序,其中快速排序是一个很好的候选算法。

时间复杂度

  • 最坏情况:O(n^2)
  • 平均情况:O(n log n)

空间复杂度

  • O(log n),这是因为递归的深度平均为log n。

Java 8

public class QuickSort {

    // 主方法调用快速排序
    public static void main(String[] args) {
        int[] array = {10, 7, 8, 9, 1, 5};
        int n = array.length;

        quickSort(array, 0, n - 1);

        System.out.println("Sorted array: " + Arrays.toString(array));
    }

    // 快速排序方法
    public static void quickSort(int[] array, int low, int high) {
        if (low < high) {
            // pi是划分后的索引,array[pi]现在在正确的位置
            int pi = partition(array, low, high);

            // 递归地分别对划分后的两个子数组进行快速排序
            quickSort(array, low, pi - 1);  // 递归左子数组
            quickSort(array, pi + 1, high); // 递归右子数组
        }
    }

    // 划分方法,返回划分后的索引
    private static int partition(int[] array, int low, int high) {
        int pivot = array[high]; // 选择最后一个元素作为基准
        int i = (low - 1); // 较小元素的索引

        for (int j = low; j < high; j++) {
            // 如果当前元素小于或等于pivot
            if (array[j] <= pivot) {
                i++;

                // 交换array[i]和array[j]
                int temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }

        // 交换array[i+1]和array[high](或pivot)
        int temp = array[i + 1];
        array[i + 1] = array[high];
        array[high] = temp;

        return i + 1; // 返回划分后的索引
    }
}

注释

在这个Java案例中,quickSort 方法实现了快速排序算法。它首先调用 partition 方法来找到基准元素的正确位置,并将数组划分为两个子数组。然后,它递归地对这两个子数组进行快速排序。partition 方法负责将数组划分为两部分,并返回基准元素的索引。

更新时间: 2025/10/3 17:56