【八大排序】java版(上)(冒泡、快排、堆排、选择排序)
文章目录
- 一、冒泡排序(重点)
- 思路
- 代码
- 二、快排(面试重点)
- 思路
- 代码
- 三、堆排序(面试重点)
- 思路
- 代码
- 四、选择排序
- 思路
- 代码
一、冒泡排序(重点)
思路
前后两两数据进行比较,小的数据往前走,大的数据往后走,每一轮结束之后,最大的数据到达正确位置
代码
public static void main(String[] args) {int[] arr={1,5,3,6,22,0,2,5};sort(arr);System.out.println(Arrays.toString(arr));}public static void sort(int[] arr){for(int j =0;j<arr.length;j++){for(int i =0;i<arr.length-j-1;i++){if(arr[i]>arr[i+1]){int temp = arr[i];arr[i] = arr[i+1];arr[i+1] = temp;}}}}
二、快排(面试重点)
思路
1.定义待排序数组当中的第一个作为基准数
2.游标 j 从后往前查找比基准数小的,查找到第一个比基准数小的数停下
3.定义游标i 从前往后查找第一个比基准数大的值停下
4.i 和 j 进行交换
5.重复2,3,4,直到i 和 j 相遇
6.基准数和相遇位置进行交换,基准数到达正确位置
7.以基准数为起始点,分成左右两部分,重复上述所有 直到数据都被拆分开为止
代码
public static void quicksort(int[] arr,int left,int right){if(left>=right){return ;}int base = arr[left];int i =left;int j = right;while(i !=j ){//j从后往前走,找比基数小的值while(arr[j] >=base && i<j){j--;}//i从前往后走,找比基数小的值while (arr[i] <= base && i<j){i++;}int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}//当i==j时arr[left] = arr[i];arr[i] = base;quicksort(arr,left,i-1);quicksort(arr,i+1,right);}
三、堆排序(面试重点)
思路
1.利用完全二叉树构建大顶堆
2.堆顶元素和堆底元素进行互换,除堆底元素之外剩余元素继续构建大顶堆
3.重复2
arr[i]的 左孩子arr[2i+1]
arr[i]的 右孩子arr[2i+2]
arr[i]的 父亲arr[(i-1)/2]
arr[i]>arr[2i+1] && arr[i]>arr[2i+2]
完全二叉树:数据从上到下 从左到右
大顶堆:父节点的值大于或等于其左右孩子的值
构建大顶堆
一、从后往前检测节点是否符合大顶堆的要求,如果符合向前检查,不符合对当前节点进行调整
1.parent指向当前节点
2.定义parent的左孩子 child(有孩子一定有左孩子)
3.判断parent的右孩子 如果有右孩子,左右孩子进行比较 child指向左右孩子的最大值
4.父子节点进行比较,如果 父节点值大,符合大顶堆,继续向前检查
5.如果子节点的值大,父子节点进行交换,parent指向child,child指向其左右孩子的最大值,继续将父子节点进行比较
6.直到父节点值大或者child为空
二、维护堆顶
parent指向 堆顶,child指向其左右孩子的最大值
父子节点进行比较,如果父节点值大,大顶堆构建完成
如果父节点值小,父子节点交换
代码
public static void main(String[] args) {int[] arr={1,5,3,6,22,0,2,5};for(int i = arr.length-1;i>=0;i--){adjust(arr,i, arr.length);}for (int i =arr.length-1;i>=0;i--){int temp =arr[i];arr[i] = arr[0];arr[0] = temp;adjust(arr,0,i);}System.out.println(Arrays.toString(arr));}/*** 堆排*/public static void adjust(int[] arr,int parent,int length){int child = 2*parent+1;while(child<length){int rchild = child + 1;if(rchild<length && arr[rchild]>arr[child]){child++;}if(arr[parent] < arr[child]){int temp = arr[parent];arr[parent] = arr[child];arr[child] = temp;parent = child;child = 2*child +1;}else {break;}}}
四、选择排序
思路
默认待排序数组当中的第一个数为最小值
找待排序数组当中真正的最小值
找到真正的最小值和待排序数组第一个数据进行交换 真正的最小值到达正确位置
代码
/*** 选择排序*/public static void chooseSort(int[] arr){for(int j = 0;j<arr.length;j++){int min = arr[j];int minIndex = j;for(int i =j+1;i<arr.length;i++){if(min>arr[i]){min = arr[i];minIndex = i;}}//min的真正最小值arr[minIndex] = arr[j];arr[j] = min;}}
相关文章:
【八大排序】java版(上)(冒泡、快排、堆排、选择排序)
文章目录 一、冒泡排序(重点)思路代码 二、快排(面试重点)思路代码 三、堆排序(面试重点)思路代码 四、选择排序思路代码 一、冒泡排序(重点) 思路 前后两两数据进行比较,小的数据往前走,大的数据往后走,每一轮结束之后,最大的数…...
.Net Core 微服务之Consul(二)-集群搭建
引言: 集合上一期.Net Core 微服务之Consul(一)(.Net Core 微服务之Consul(一)-CSDN博客) 。 目录 一、 Consul集群搭建 1. 高可用 1.1 高可用性概念 1.2 高可用集群的基本原理 1.3 高可用集群的架构设计 1.3.1 主从复制架构 1.3.2 共享存储架构 1.3.3 负载均衡…...
C++ --> 类和对象(二)
前言 在前面简单的介绍了OOP,什么是类,在类中的this指针。接下来就深入理解类和对象。 默认成员函数 默认构造函数:用于在创建对象时初始化对象的成员变量。默认拷贝构造函数:用于使用已存在的对象来初始化新创建的对象。默认析构…...
利用宝塔安装一套linux开发环境
更新yum,并且更换阿里镜像源 删除yum文件 cd /etc/yum.repos.d/ 进入yum核心目录 ls sun.repo rm -rf * 删除之前配置的本地源 ls 配置阿里镜像源 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo 配置扩展包 wge…...
VB 实例:掌握 Visual Basic 编程的精髓
VB 实例:掌握 Visual Basic 编程的精髓 引言 Visual Basic(简称VB)是一种由微软开发的高级编程语言,它结合了易于使用的界面和强大的编程功能,使得初学者和专业人士都能快速开发Windows桌面应用程序。本文将通过一系列实例,深入探讨VB编程的基础知识和高级技巧,帮助读…...
层次分析法:matlab代码实现
计算权重: 一、算术平均法 关于矩阵: 1、矩阵的输入写法 [ ; ; ]同行用空格或逗号隔开,不同行用分号间隔 2、矩阵求和 默认按列求和 asum(E) 等同于 asum(E,1) 得到行向量 按行求和 asum(E,2) 得到列向量 对整个矩阵求和 asum(E,"all&…...
07-7.5.3 处理冲突的方法
👋 Hi, I’m Beast Cheng 👀 I’m interested in photography, hiking, landscape… 🌱 I’m currently learning python, javascript, kotlin… 📫 How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以…...
几何距离与函数距离:解锁数据空间中的奥秘
几何距离:直观的空间度量 几何距离,顾名思义,是我们在几何学中熟悉的距离概念,如欧几里得距离、曼哈顿距离和切比雪夫距离等。这些距离度量直接反映了数据点在多维空间中的位置关系。 欧几里得距离:最为人熟知的几何距…...
LabVIEW的Actor Framework (AF) 结构介绍
LabVIEW的Actor Framework (AF) 是一种高级架构,用于开发并发、可扩展和模块化的应用程序。通过面向对象编程(OOP)和消息传递机制,AF结构实现了高效的任务管理和数据处理。其主要特点包括并发执行、动态可扩展性和强大的错误处理能…...
gitlab 搭建使用
1. 硬件要求 ##CPU 4 核心500用户 8 核心1000用户 ##内存 4 G内存500用户 8 G内存1000用户 2. 下载 链接 3. 安装依赖 yum -y install curl openssh-server postfix wget 4. 安装gitlab组件 yum -y localinstall gitlab-ce-15.9.3-ce.0.el7.x86_64.rpm 5. 修改配置文…...
探索JT808协议在车辆远程视频监控系统中的应用
一、部标JT808协议概述 随着物联网技术的迅猛发展,智能交通系统(ITS)已成为现代交通领域的重要组成部分。其中,车辆远程监控与管理技术作为ITS的核心技术之一,对于提升交通管理效率、保障道路安全具有重要意义。 JT8…...
视频使用操作说明书-T80005系列视频编码器如何对接海康NVR硬盘录像机,包括T80005系列高清HDMI编码器、4K超高清HDMI编码器
视频使用操作说明书-T80005系列视频编码器如何对接海康NVR硬盘录像机,包括T80005系列高清HDMI编码器、4K超高清HDMI编码器。 视频使用操作说明书-T80005系列视频编码器如何对接海康NVR硬盘录像机,包括T80005系列高清HDMI编码器、4K超高清HDMI编码器 同三…...
keep-alive缓存组件
keep-alive缓存组件是Vue.js中的一个特殊组件,主要用于缓存内部组件的数据状态,以提高应用的性能和用户体验。以下是关于keep-alive缓存组件的详细解析: 一、作用 缓存组件状态:当组件在<keep-alive>内部切换时࿰…...
Linux上如何安装ffmpeg视频处理软件
在Linux上安装ffmpeg需要以下步骤: 更新系统 在开始安装之前,首先需要更新系统以获取最新的软件包列表和版本。在终端中执行以下命令: sudo apt update sudo apt upgrade安装依赖库 ffmpeg依赖于一些库和工具,需要先安装它们。在…...
element如何实现自定义表头?
有时候我们需要实现自定义表头,例如表头里加按钮啥的,这时候就需要用到自定义表头,但是官方对自定义表头的使用写的还是比较简单,今天就来详细说说 在需要使用自定义表头的表头上使用:render-header来启用自定义表头: <el-table-column :render-header="button&…...
OTP防重放攻击
OTP本意是一次性口令,比如邮箱验证码,短信验证码,或者根据totp或者hotp生成的默认30秒一变的6位数字。 不过开发者要注意,必须要在验证成功后失效那个验证码,不然就会导致重放攻击。 对于邮箱验证码,服务器…...
Oracle数据库加密与安全
Wallet简介: Oracle Wallet(即内部加密技术TDE( Transparent DataEncryption) TDE是 Oracle10gR2中推出的一个新功能,使用时要保证Oracle版本是在10gR2或者以上 Wallet配置: 1.创建一个新目录,并指定为Wallet目录 /home/oracle…...
【YOLO格式的数据标签,目标检测】
标签为 YOLO 格式,每幅图像一个 *.txt 文件(如果图像中没有对象,则不需要 *.txt 文件)。*.txt 文件规格如下: 每个对象一行 每一行都是 class x_center y_center width height 格式。 边框坐标必须是 归一化的 xywh 格式&#x…...
Memcached内存碎片清理术:优化缓存性能的策略
标题:Memcached内存碎片清理术:优化缓存性能的策略 内存碎片是Memcached在长期运行过程中常见的问题,它会降低缓存效率并影响性能。作为高效的分布式内存缓存系统,Memcached提供了多种内存碎片整理策略。本文将详细介绍这些策略&…...
禁止使用存储过程
优质博文:IT-BLOG-CN 灵感来源 什么是存储过程 存储过程Stored Procedure是指为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户可通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行。 …...
重构求职效率:boss_batch_push批量投递工具的颠覆性价值
重构求职效率:boss_batch_push批量投递工具的颠覆性价值 【免费下载链接】boss_batch_push Boss直聘批量投简历,解放双手 项目地址: https://gitcode.com/gh_mirrors/bo/boss_batch_push boss_batch_push是一款专为Boss直聘平台设计的开源自动化投…...
量子机器学习在医疗影像中的技术迷思与测试验证陷阱
当量子计算遭遇医学影像近年来,"量子赋能医疗影像"成为热门概念,宣称通过量子算法(如QSVM、量子卷积)可大幅提升病灶识别精度和图像重建效率。然而,作为软件测试从业者,我们需警惕技术炒作背后的…...
103. ancher WebSocket 与 NGINX OSS 入口控制器的故障
Environment 环境 SUSE Rancher 2.10.3AWS EKS cluster AWS EKS 集群NGINX OSS Ingress Controller (oci://ghcr.io/nginx/charts/nginx-ingress) NGINX OSS 入口控制器(oci:// ghcr.io/nginx/charts/nginx-ingress) Situation 地理位置 After upgrad…...
猫抓插件:浏览器资源嗅探的革命性解决方案
猫抓插件:浏览器资源嗅探的革命性解决方案 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾在浏览网页时,看到心仪的…...
多场景适配:ClearerVoice-Studio支持16K/48K采样率,会议直播都适用
多场景适配:ClearerVoice-Studio支持16K/48K采样率,会议直播都适用 1. 为什么音频采样率如此重要? 在语音处理领域,采样率选择直接影响最终效果。就像相机像素决定照片清晰度一样,音频采样率决定了声音的"分辨率…...
ESP32-S3实战指南:SPI多设备管理与高效数据传输
1. ESP32-S3的SPI总线基础认知 第一次接触ESP32-S3的SPI总线时,我完全被各种专业术语搞懵了。后来在实际项目中反复折腾才发现,SPI本质上就是个"快递小哥",负责在芯片和外围设备之间搬运数据。ESP32-S3内置了4个这样的"快递站…...
3步搞定黑苹果配置:OpCore-Simplify自动化工具如何解决90%的安装难题
3步搞定黑苹果配置:OpCore-Simplify自动化工具如何解决90%的安装难题 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 开篇:黑苹…...
学习网络安全至少需要什么配置的电脑?
很多同学对于学习 Web 渗透所需的电脑配置仍有疑问,所以老师结合自己的教学经验,总结了关于电脑配置要求的一些内容,遂成此文。当然,对于电脑配置的追求是无上限的,所以有条件的话最好还是搞一台配置强劲的电脑。 一、…...
告别重复编码:用Copaw结合快马平台,自动化生成你的常用工具模块
作为一名经常需要整理会议纪要的开发者,我一直在寻找能提升效率的工具。最近尝试用Copaw结合InsCode(快马)平台做了一个会议纪要自动生成器,效果出乎意料地好。整个过程几乎没写代码,却实现了核心功能,分享下具体实现思路…...
【材料】吸波材料的电导损耗和极化损耗【含Matlab源码 15266期】
💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab领域博客之家💞&…...
