【选择排序和交换排序】直接选择排序、堆排序、冒泡排序、快速排序

【选择排序和交换排序】直接选择排序、堆排序、冒泡排序、快速排序

  • 1. 选择排序
    • 1.1 直接选择排序
      • 1.1.1详细过程
      • 1.1.2 代码实现
      • 1.1.3 复杂度和稳定性
    • 1.2 堆排序
  • 2. 交换排序
    • 2.1 冒泡排序
      • 2.1.1 代码实现
      • 2.1.2 复杂度和稳定性
    • 2.2 快速排序——挖坑法
      • 2.2.1详细过程
      • 2.2.2 代码实现
      • 2.2.3 复杂度和稳定性

1. 选择排序

1.1 直接选择排序

1.1.1详细过程

1.1.2 代码实现

 //直接选择排序public static void sort(int[] arr){int left=0;do{int min=left;for(int i=left+1;i<arr.length;i++){//找到最小if(arr[i]<arr[min]) min=i;}//交换int tmp=arr[left];arr[left]=arr[min];arr[min]=tmp;left++;System.out.println("第"+left+"次: "+ Arrays.toString(arr));}while(left<arr.length);}public static void main(String[] args) {int[] arr=new int[]{1,56,88,66,35,2,8};sort(arr);}

运行结果:

1.1.3 复杂度和稳定性

  • 时间复杂度O(N^2)
  • 空间复杂度O(1)
  • 稳定性: 稳定

1.2 堆排序

关于堆排序的内容,详细跳转堆排序

2. 交换排序

2.1 冒泡排序

由于大家对冒泡排序已经很熟悉了,所以在这里就不做多余解释,直接进行代码实现。

2.1.1 代码实现

    public static void sort(int[] arr) {boolean swapped;for (int i = 0; i < arr.length - 1; i++) {swapped = false;for (int j = 0; j < arr.length - 1 - i; j++) {if (arr[j] > (arr[j + 1])) {// 交换int tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;swapped = true;}}System.out.println("第" + (i + 1) + "遍:" + Arrays.toString(arr));// 如果这一轮没有发生交换,说明数组已经有序,可以提前结束if (!swapped) {break;}}}public static void main(String[] args) {int[] arr = new int[]{56, 1, 88, 66, 35, 7, 6, 2};sort(arr);}

运行结果

2.1.2 复杂度和稳定性

  • 时间复杂度O(N^2)
  • 空间复杂度O(1)
  • 稳定性: 稳定

2.2 快速排序——挖坑法

2.2.1详细过程

2.2.2 代码实现

public static void sort(int[] arr, int left, int right) {if (left >= right || left >= arr.length || right < 0) return;int pos = arr[left]; // 挖坑,保存基准值int i = left, j = right;while (i < j) {// 从右侧开始,找到小于基准值的数while (i < j && arr[j] >= pos) {j--;}if (i < j) {arr[i] = arr[j]; // 将小于基准值的数填到左边坑中i++;}// 从左侧开始,找到大于基准值的数while (i < j && arr[i] <= pos) {i++;}if (i < j) {arr[j] = arr[i]; // 将大于基准值的数填到右边坑中j--;}}arr[i] = pos; // 将基准值填回坑中System.out.println(Arrays.toString(arr));sort(arr, left, i - 1); // 递归排序左半部分sort(arr, i + 1, right); // 递归排序右半部分}public static void main(String[] args) {int[] arr = new int[]{56, 1, 88, 66, 35, 7, 6, 28};sort(arr, 0, arr.length - 1);}

运行结果

2.2.3 复杂度和稳定性

  • 时间复杂度O(N*logN)
  • 空间复杂度O(1)
  • 稳定性: 不稳定

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/480224.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DI依赖注入详解

DI依赖注入 声明了一个成员变量&#xff08;对象&#xff09;之后&#xff0c;在该对象上面加上注解AutoWired注解&#xff0c;那么在程序运行时&#xff0c;该对象自动在IOC容器中寻找对应的bean对象&#xff0c;并且将其赋值给成员变量&#xff0c;完成依赖注入。 AutoWire…

51c大模型~合集79

我自己的原文哦~ https://blog.51cto.com/whaosoft/12661268 #还是回谷歌好 创业一年半&#xff0c;胖了30斤&#xff0c;AI大佬感叹 回到大厂&#xff0c;和老领导重聚。 「由于工作强度和不健康的生活方式&#xff0c;我已胖了 15 公斤。」 本周一&#xff0c;知名 AI 学…

工业AI质检 AI质检智能系统 尤劲恩(上海)信息科技有限公司

来的现代化工厂&#xff0c;将逐步被无人化车间取代&#xff0c;无人工厂除了产线自动化&#xff0c;其无人质检将是绕不开的话题。尤劲恩致力于帮助工业制造领域上下游工厂减员增效、提高品质效率&#xff0c;真正实现无人质检IQC/IPQC/OQC的在线质检系统。分析生产环节真实品…

【CSS in Depth 2 精译_062】第 10 章 CSS 中的容器查询(@container)概述 + 10.1 容器查询的一个简单示例

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 【第十章 CSS 容器查询】 ✔️ 10.1 容器查询的一个简单示例 ✔️ 10.1.1 容器尺寸查询的用法 ✔️ 10.2 深入理解容器10.3 与容器相关的单位10.4 容器样式查询的用法10.5 本章小结 文章目录 第 10…

ELK(Elasticsearch + logstash + kibana + Filebeat + Kafka + Zookeeper)日志分析系统

文章目录 前言架构软件包下载 一、准备工作1. Linux 网络设置2. 配置hosts文件3. 配置免密登录4. 设置 NTP 时钟同步5. 关闭防火墙6. 关闭交换分区7. 调整内存映射区域数限制8. 调整文件、进程、内存资源限制 二、JDK 安装1. 解压软件2. 配置环境变量3. 验证软件 三、安装 Elas…

视频汇聚平台Liveweb国标GB28181视频平台监控中心设计

在现代安防视频监控领域&#xff0c;Liveweb视频汇聚平台以其卓越的兼容性和灵活的拓展能力&#xff0c;为用户提供了一套全面的解决方案。该平台不仅能够实现视频的远程监控、录像、存储与回放等基础功能&#xff0c;还涵盖了视频转码、视频快照、告警、云台控制、语音对讲以及…

Linux 内核 调用堆栈打印函数

文章目录 内核函数调用堆栈打印1. dump_stack()一、作用二、工作原理三、实现方式四、示例实际演示 2.WARN_ON()3. panic()一、函数作用二、函数行为三、panic() 函数的参数四、使用场景 4. BUG_ON()使用场景 内核函数调用堆栈打印 1. dump_stack() dump_stack()是Linux内核中…

C语言——指针初阶(一)

目录 一.什么是指针&#xff1f;&#xff1f;&#xff1f; 指针是什么&#xff1f; 指针变量&#xff1a; 总结&#xff1a; 总结&#xff1a; 二.指针和指针类型 指针-整数&#xff1a; 总结&#xff1a; 指针的解引用 总结&#xff1a; 三.野指针 如何规避野指针 往期…

【Redis】Redis 预备知识

目录 1. 基本全局命令 KEYS EXISTS DEL EXPIRE TTL TYPE 2. 数据结构和内部编码 3. 单线程架构 Redis 提供了5种数据结构&#xff0c;理解每种数据结构的特点对于 Redis 开发运维非常重要&#xff0c;同时掌握每种数据结构的常见命令&#xff0c;会在使用 Redis 的时…

Facebook广告无法投放是什么原因?

Facebook作为全球知名的社媒平台&#xff0c;同时也成为许多知名海外企业的广告首选。但很投手在投放过程中也发现&#xff0c;Facebook 广告投放失败或者被拒投&#xff0c;那到底为什么呢&#xff1f; 其实Facebook广告有着非常严格的审核制度&#xff0c;通常投放失败可能是…

【uniapp】轮播图

前言 Uniapp的swiper组件是一个滑块视图容器组件&#xff0c;可以在其中放置多个轮播图或滑动卡片。它是基于微信小程序的swiper组件进行封装&#xff0c;可以在不同的平台上使用&#xff0c;如微信小程序、H5、App等。 效果图 前端代码 swiper组件 <template><vi…

【JavaEE】多线程(3)

首先回顾一下线程不安全的原因&#xff1a; 线程是随机调度&#xff0c;抢占式执行的修改共享数据&#xff0c;多个线程修改同一个变量多个线程修改共享数据的操作不是原子性&#xff0c;&#xff08;count是3个CPU指令&#xff0c;但是赋值操作就是原子性的&#xff09;内存可…

(0基础保姆教程)-JavaEE开课啦!--12课程(Spring MVC注解 + Vue2.0 + Mybatis)-实验10

一、常见的SpringMVC注解有哪些&#xff1f; 1.Controller&#xff1a;用于声明一个类为 Spring MVC 控制器。 2.RequestMapping&#xff1a;用于将 HTTP 请求映射到特定的处理方法上。可以指定请求类型&#xff08;GET、POST等&#xff09;和URL路径。 3.GetMapping&#xff…

20241124 Typecho 视频插入插件

博文免不了涉及到视频插入这些,网上的插件都或多或少的比较重,和Typecho的风格不搭配 后面就有了DPlay插件精简而来的VideoInsertion插件 VideoInsertion: Typecho 视频插入插件 目录结构 rockhinlink-ht2:/var/www/html/typecho/usr/plugins/VideoInsertion$ tree -h [4.…

网络地址转换

NAT概述 解决公有地址不足&#xff0c;并且分配不均匀的问题 公有地址&#xff1a;由专门的机构管理、分配&#xff0c;可以在因特网上直接通信 私有地址&#xff1a;组织和个人可以任意使用&#xff0c;只能在内网使用的IP地址 A、B、C类地址中各预留了一些私有IP地址 A&…

H5流媒体播放器EasyPlayer.js网页直播/点播播放器如果H.265视频在播放器上播放不流畅,可以考虑的解决方案

随着流媒体技术的迅速发展&#xff0c;H5流媒体播放器已成为现代网络视频播放的重要工具。其中&#xff0c;EasyPlayer.js网页直播/点播播放器作为一款功能强大的H5播放器&#xff0c;凭借其全面的协议支持、多种解码方式以及跨平台兼容性&#xff0c;赢得了广泛的关注和应用。…

以达梦为数据库底座时部署的微服务页面报乱码,调整兼容模式

1.问题描述 部署微服务&#xff0c;文件、代码是延用的mysql类型的&#xff0c;部署前做了部分适配&#xff0c;但是在使用dm数据库进行安装的服务在页面上查询出的数据却都是乱码 2.查询官网&#xff0c;注意到一个参数COMPATIBLE_MODE兼容模式的配置 考虑是延用mysql&…

【RL Base】强化学习核心算法:深度Q网络(DQN)算法

&#x1f4e2;本篇文章是博主强化学习&#xff08;RL&#xff09;领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对相关等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅…

Spring Boot【三】

自动注入 xml中可以在bean元素中通过autowire属性来设置自动注入的方式&#xff1a; <bean id"" class"" autowire"byType|byName|constructor|default" /> byName&#xff1a;按照名称进行注入 byType&#xff1a;按类型进行注入 constr…

软件报错:找不到vcomp140.dll的原因分析,总结六种解决vcomp140.dll的方法

vcomp140.dll是一个与MicrosoftVisualCRedistributableforVisualStudio2015相关的动态链接库文件&#xff0c;主要用于支持并行编程。这个DLL文件是VisualC库的一部分&#xff0c;用来处理并行计算&#xff0c;特别是那些利用OpenMP(OpenMulti-Processing)技术编写的程序。分析…