news 2026/5/12 22:41:28

深入理解快速排序算法(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/10 8:55:12

使用javascript进行内网大附件上传的详解及代码示例?

来自一名"预算紧张"程序员的求助信 各位大神们好啊&#xff01;(拱手) 我是一名浙江的Java程序员&#xff0c;最近接了个"惊天地泣鬼神"的大项目——20G文件上传下载系统&#xff01;客户要求还挺多&#xff0c;但最让我感动的是预算&#xff1a;整整100…

作者头像 李华
网站建设 2026/5/12 7:09:33

(2026 学生版)学术写作 AI 论文工具排行榜

&#x1f3c6; 3 个精选标题2026 学生党 AI 论文工具性价比 TOP 榜&#xff1a;PaperRed 领衔&#xff0c;免费 / 低成本高效搞定学术写作预算有限也能当学霸&#xff01;AI 论文工具排行榜&#xff08;含 PaperRed / 豆包 / DeepSeek 实测&#xff09;避坑指南 性价比之王&am…

作者头像 李华
网站建设 2026/5/11 9:00:00

全网热议!2026年最佳免费制作视频二维码推荐榜单

随着信息分享的需求不断增长&#xff0c;视频二维码成为2026年的热门选择。选择合适的工具制作视频二维码&#xff0c;可以大大提高信息传播的效率。各大工具具备简单的操作和多种功能&#xff0c;适合不同场景如教育培训和产品宣传。通过这些工具&#xff0c;用户可以轻松上传…

作者头像 李华