news 2026/6/2 20:12:31

深入理解快速排序算法(Java实现)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深入理解快速排序算法(Java实现)

深入理解快速排序算法(Java实现)

1. 算法简介

快速排序(Quicksort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

2. 核心思想

快速排序使用分治法(Divide and Conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。

步骤为:

  1. 从数列中挑出一个元素,称为 "基准"(pivot);
  2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
  3. 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

3. Java 代码实现

下面是一个标准的快速排序实现:

import java.util.Arrays; public class QuickSort { public static void main(String[] args) { int[] arr = {10, 7, 8, 9, 1, 5}; System.out.println("原始数组: " + Arrays.toString(arr)); quickSort(arr, 0, arr.length - 1); System.out.println("排序后数组: " + Arrays.toString(arr)); } /** * 快速排序主方法 * @param arr 待排序数组 * @param low 起始索引 * @param high 结束索引 */ public static void quickSort(int[] arr, int low, int high) { if (low < high) { // partitionIndex 是分区操作后 pivot 的位置 int partitionIndex = partition(arr, low, high); // 递归排序 pivot 左边和右边的元素 quickSort(arr, low, partitionIndex - 1); quickSort(arr, partitionIndex + 1, high); } } /** * 分区操作 * 该函数选取最后一个元素作为 pivot * 将小于 pivot 的元素放在 pivot 左边 * 将大于 pivot 的元素放在 pivot 右边 */ private static int partition(int[] arr, int low, int high) { // 选择最后一个元素作为基准 int pivot = arr[high]; // i 是较小元素的索引 int i = (low - 1); for (int j = low; j < high; j++) { // 如果当前元素小于或等于 pivot if (arr[j] <= pivot) { i++; // 交换 arr[i] 和 arr[j] swap(arr, i, j); } } // 交换 arr[i+1] 和 arr[high] (或 pivot) 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; } }

4. 复杂度分析

  • 时间复杂度
    • 平均情况:O(n log n)
    • 最坏情况:O(n^2) (例如数组已经有序,且每次选择最后一个元素作为基准)
    • 最好情况:O(n log n)
  • 空间复杂度:O(log n) (递归调用栈的空间)

快速排序通常被认为是同数量级(O(n log n))的排序算法中平均性能最好的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 23:10:49

SpaceX星际先行者的三重跃迁:从基本盘到太空生态的万亿蓝图

摘要&#xff1a;本报告聚焦SpaceX商业航天生态&#xff0c;内容覆盖星链、火箭发射、太空算力、太空光伏及月球经济、火星殖民五大核心板块&#xff0c;同步梳理SpaceX供应链、国内火箭/卫星/太空算力赛道投资标的&#xff0c;分析存在的物理瓶颈、成本、运维等风险&#xff0…

作者头像 李华
网站建设 2026/5/30 17:11:19

学长亲荐 10个AI论文写作软件:专科生毕业论文+开题报告高效工具测评

在当前学术写作环境日益复杂的背景下&#xff0c;专科生在撰写毕业论文和开题报告时常常面临内容构思困难、资料查找繁琐、格式规范不熟悉等多重挑战。为了帮助更多学生高效完成学术任务&#xff0c;笔者基于2026年的实测数据与真实用户反馈&#xff0c;对市面上主流的AI论文写…

作者头像 李华
网站建设 2026/5/28 14:46:06

一天一个Python库:fsspec - 统一文件系统接口,轻松访问数据

fsspec - 统一文件系统接口&#xff0c;轻松访问数据 一、什么是fsspec&#xff1f; fsspec 是一个用于提供统一文件系统接口的 Python 库。它抽象了各种文件系统&#xff08;如本地文件系统、S3、GCS、HDFS等&#xff09;的细节&#xff0c;让你可以用统一的方式操作文件。 它…

作者头像 李华
网站建设 2026/5/30 16:58:32

芯片专家的“黑箱决策”正在拖垮团队

芯片团队开会的经典场景&#xff1a;讨论了两小时的时序方案,争得面红耳赤。这时资深专家敲敲桌子&#xff1a;“就用方案B。”会议室安静了。没人问为什么,也没人敢问。这就是芯片行业最普遍的决策方式——专家拍板,过程保密。不是说专家的判断一定错。恰恰相反,很多时候他们是…

作者头像 李华
网站建设 2026/5/29 2:31:42

计算机毕业设计springboot图书在线借阅系统 基于SpringBoot的智慧图书馆借阅服务平台 高校数字化图书借还管理系统的设计与实现

计算机毕业设计springboot图书在线借阅系统v6fh70kc &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。 随着信息技术的飞速发展和移动互联网的普及&#xff0c;传统图书馆管理模式…

作者头像 李华