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

排序算法比较

算法性能比较

排序算法平均时间复杂度最坏时间复杂度空间复杂度稳定性
快速排序O(n log n)O(n²)O(log n)不稳定
归并排序O(n log n)O(n log n)O(n)稳定
堆排序O(n log n)O(n log n)O(1)不稳定
插入排序O(n²)O(n²)O(1)稳定
选择排序O(n²)O(n²)O(1)不稳定
冒泡排序O(n²)O(n²)O(1)稳定
希尔排序O(n log n)O(n²)O(1)不稳定
计数排序O(n + k)O(n + k)O(k)稳定

1. 快速排序

1. void quickSort(int[] arr, int low, int high)

  1. 确定一个基准元素位置
  2.  基准左边递归快排
  3.  基准右边递归快排 
  4. 条件判断low < high

2. int partition(int[] arr, int low, int high)

确定一个基准元素(即选择的比较元素)位置:

  1. 确定比较元素(随机,可以选择high下标位置)
  2.  用i记录<=基准元素 的最大下标
  3.  遍历low->high区间,将当前元素和比较元素比较,如果<=,则将i下标向前移动,并将当前下标和i下标元素交换位置。
  4. 将i+1下标元素(>比较元素的元素)和比较元素交换位置 , 从而确定了比较元素(基准元素)的位置
  5. 返回基准元素的下标
public class QuickSort {// 基础快速排序public static void quickSort(int[] arr) {quickSort(arr, 0, arr.length - 1);}// 1. 确定一个基准元素位置 2. 基准左边递归快排 3. 基准右边递归快排  4.条件判断low < highprivate static void quickSort(int[] arr, int low, int high) {// 注意这里是if, 不是whileif (low < high) {int pivotIndex = partition(arr, low, high);quickSort(arr, low, pivotIndex - 1);quickSort(arr, pivotIndex + 1, high);}}// 确定一个基准元素位置(即选择的比较元素):1. 确定比较元素(随机,可以选择high下标位置) 2. 用i记录<=基准元素 的最大下标 3. 遍历low->high区间,将当前元素和比较元素比较,如果<=,则将i下标向前移动,并将当前下标和i下标元素交换位置。4. 将i+1下标元素(>比较元素的元素)和比较元素交换位置 , 从而确定了比较元素(基准元素)的位置 5. 返回基准元素的下标private static int partition(int[] arr, int low, int high) {int pivot = arr[high];int i = low - 1;// 注意这里是 < high, 不是<=for (int j = low; j < high; j++) {if (arr[j] <= pivot) {i++;swap(arr, i, j);}}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;}public static void main(String[] args) {int[] arr = {64, 34, 25, 12, 22, 11, 90, 88};System.out.println("原始数组: " + Arrays.toString(arr));// 测试不同的排序算法int[] arr1 = arr.clone();QuickSort.quickSort(arr1);System.out.println("快速排序: " + Arrays.toString(arr1));
}

2. 归并排序

3. 

http://www.dtcms.com/a/449442.html

相关文章:

  • Learning To Rank
  • 建模布线8
  • 第十六章:固本培元,守正出奇——Template Method的模板艺术
  • 网站开发管理学什么3建设营销型网站流程图
  • 【论文阅读】-《SparseFool: a few pixels make a big difference》
  • SLAM中的非线性优化-2D图优化之视觉惯性VIO(二十-终结篇)
  • 如何做自己的游戏网站介绍自己做的电影网站
  • Qt Creator配置git插件功能
  • 【大前端】Vue 和 React 的区别详解 —— 两大前端框架深度对比
  • 衡阳网站搜索引擎优化服务器维护要多久
  • 网站改版需要注意什么网站开发注册流程以及收费
  • 大模型开发 - 02 Spring AI Concepts
  • SpringAI指标监控
  • 在国内网络环境下高效配置与使用 Flutter
  • C++--二叉搜索树
  • dw网站怎么做点击图片放大潍坊建筑公司排名
  • 短视频素材网站免费大推荐淘宝seo 优化软件
  • 超声波图像乳腺癌识别分割数据集647张2类别
  • 【基于MQ的多任务分发体系】
  • DeploySharp开源发布:让C#部署深度学习模型更加简单
  • 网站开发专业就业指导可视化网站制作软件
  • 【MySQL】 SQL图形化界面工具DataGrip
  • PostgreSQL 安装与操作指南
  • iis怎么做网站cho菌主题wordpress
  • 网站大全软件下载淘宝搜索框去什么网站做
  • Python 编程语言介绍
  • 以太网接口
  • OpenHarmony(开源鸿蒙)小白入门教程
  • 光通信|OAM-偏振联合交叉连接
  • 广州建设工程质量安全网站网站数据库怎么备份