news 2026/7/18 23:04:01

Java 排序算法实现与复杂度分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java 排序算法实现与复杂度分析

1. 归并排序 (Merge Sort)

核心思想:分治策略,将数组递归地分成两半,分别排序后再合并。

特点:

  • 空间复杂度:O(N) - 需要额外数组存储合并结果
  • 时间复杂度:O(NlogN) - 稳定高效
  • 稳定性:稳定 - 相等元素相对位置不变
// 归并排序 // 空间复杂度 O(N) // 时间复杂度 O(NlogN) // 稳定 private static void mergeSort(int[] arr) { mergeSort(arr, 0, arr.length - 1); } private static void mergeSort(int[] arr, int left, int right) { if (left >= right) { return; } int mid = (left + right) / 2; mergeSort(arr, left, mid); mergeSort(arr, mid + 1, right); merge(arr, left, mid, right); } private static void merge(int[] arr, int left, int mid, int right) { int[] result = new int[right - left + 1]; int resultSize = 0; int cur1 = left; int cur2 = mid + 1; while (cur1 <= mid && cur2 <= right) { if (arr[cur1] < arr[cur2]) { result[resultSize++] = arr[cur1++]; } else { result[resultSize++] = arr[cur2++]; } } while (cur1 <= mid) { result[resultSize++] = arr[cur1++]; } while (cur2 <= right) { result[resultSize++] = arr[cur2++]; } for (int i = 0; i < result.length; i++) { arr[left + i] = result[i]; } }

2. 冒泡排序 (Bubble Sort)

核心思想:重复遍历数组,比较相邻元素,将较大元素逐步"冒泡"到数组末尾。

特点:

  • 空间复杂度:O(1) - 原地排序
  • 时间复杂度:O(N²) - 效率较低
  • 稳定性:稳定 - 相等元素相对位置不变
// 冒泡排序 // 空间复杂度 O(1) // 时间复杂度 O(N^2) // 稳定 private static void bubbleSort(int[] arr) { for (int bound = 0; bound < arr.length - 1; bound++) { for (int cur = arr.length - 1; cur > bound; cur--) { if (arr[cur - 1] > arr[cur]) { int temp = arr[cur - 1]; arr[cur - 1] = arr[cur]; arr[cur] = temp; } } } }

3. 快速排序 (Quick Sort)

核心思想:分治策略,选取基准元素,将数组分为小于基准和大于基准的两部分,递归排序。

特点:

  • 空间复杂度:最坏 O(N),平均 O(logN) - 递归栈空间
  • 时间复杂度:最坏 O(N²),平均 O(NlogN)
  • 稳定性:不稳定 - 相等元素可能交换位置
// 快速排序 // 空间复杂度 最坏 O(N),平均 O(logN) // 时间复杂度 最坏 O(N^2),平均 O(NlogN) // 不稳定 private static void quickSort(int[] arr) { quickSort(arr, 0, arr.length - 1); } private static void quickSort(int[] arr, int left, int right) { if (left >= right) { return; } int index = partition(arr, left, right); quickSort(arr, left, index - 1); quickSort(arr, index + 1, right); } private static int partition(int[] arr, int left, int right) { int value = arr[right]; int l = left; int r = right; while (l < r) { while (l < r && arr[l] <= value) { l++; } while (l < r && arr[r] >= value) { r--; } swap(arr, l, r); } swap(arr, l, right); return l; } private static void swap(int[] arr, int l, int r) { int temp = arr[l]; arr[l] = arr[r]; arr[r] = temp; }

4. 快速排序非递归版本

核心思想:使用栈模拟递归过程,避免递归调用栈的开销。

// 快速排序(非递归版本) static class Range { public int left; public int right; public Range(int left, int right) { this.left = left; this.right = right; } } static void quickSortByLoop(int[] arr) { Stack<Range> stack = new Stack<>(); stack.push(new Range(0, arr.length - 1)); while (!stack.isEmpty()) { Range range = stack.pop(); if (range.left >= range.right) { continue; } int index = partition(arr, range.left, range.right); stack.push(new Range(range.left, index - 1)); stack.push(new Range(index + 1, range.right)); } }

5. 算法对比总结

排序算法空间复杂度时间复杂度稳定性适用场景
归并排序O(N)O(NlogN)稳定大数据量、需要稳定排序
冒泡排序O(1)O(N²)稳定教学演示、小数据量
快速排序平均 O(logN)平均 O(NlogN)不稳定通用场景、性能要求高

使用建议:

  • 归并排序适合需要稳定排序且内存充足的大数据场景
  • 冒泡排序适合教学演示或数据量极小的场景
  • 快速排序适合大多数通用排序场景,性能优秀
  • 快速排序非递归版本适合避免递归栈溢出的场景
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/18 22:59:49

AI 驱动的独立产品灾备架构:从备份到一键恢复

AI 驱动的独立产品灾备架构&#xff1a;从备份到一键恢复 一、数据灾难的不可预测性&#xff1a;独立产品为何需要系统化的灾备体系 独立产品的运维容错空间远小于企业级应用。一个 SaaS 平台部署在单台云服务器上&#xff0c;数据库跑在同一个实例里&#xff0c;文件存储依赖…

作者头像 李华
网站建设 2026/7/18 22:59:40

Service Mesh 配置热更新:修改 VirtualService 后多久生效

Service Mesh 配置热更新&#xff1a;修改 VirtualService 后多久生效 一、你改了 Istio 的路由规则&#xff0c;等了 5 分钟发现还没生效 这是 Service Mesh 运维中最让人抓狂的场景&#xff1a;你在 VirtualService 里加了一条路由权重——destination: v2, weight: 100&am…

作者头像 李华
网站建设 2026/7/18 22:58:09

私域5年,我亲手埋掉了“人海战术”:2026年,没有系统,别做私域

深夜11点&#xff0c;我让最后一名运营强行关掉电脑回家。 看着后台那一串冰冷的“限流警告”数据&#xff0c;我默默把明天要提交的“扩招申请”文件拖进了回收站。 那一刻我意识到&#xff0c;如果思维不换&#xff0c;招再多的人&#xff0c;也不过是给平台“送人头”。做了…

作者头像 李华
网站建设 2026/7/18 22:57:39

数字孪生之四维空间感知升级之透明机场

数字孪生之四维空间感知升级之透明机场 纯视觉AI全域四维感知透明机场数字孪生管控技术方案 一、方案概述 针对传统机场管控痛点&#xff1a;航站楼墙体、廊桥、停机坪设备遮挡形成大量视觉盲区&#xff1b;跑道、滑行道、油库、货运区、围界监控画面碎片化割裂&#xff…

作者头像 李华
网站建设 2026/7/18 22:55:59

SQL 窗口函数性能调优:ROWS 和 RANGE 的执行代价差异

SQL 窗口函数性能调优&#xff1a;ROWS 和 RANGE 的执行代价差异 一、同一个窗口&#xff0c;5倍性能差距从哪来 先说一个真实案例。我们在 ClickHouse 上跑一个交易日报&#xff0c;需要计算每支股票过去 30 个交易日的滚动平均成交量&#xff1a; -- 写法A&#xff1a;RANGE …

作者头像 李华