【八大排序(二)】选择排序与堆排序

❣博主主页: 33的博客❣
▶️文章专栏分类:八大排序◀️
🚚我的代码仓库: 33的代码仓库🚚
🫵🫵🫵关注我带你了解更多排序知识

在这里插入图片描述

目录

  • 1.前言
  • 2.选择排序
    • 2.1基本思想
    • 2.2画图理解
    • 2.3单向选择排序代码实现
    • 2.4双向选择排序代码实现
  • 3.堆排序
    • 3.1基本思想
    • 3.2画图理解
    • 3.3代码实现
  • 4 .总结

1.前言

在上一篇文章种博主已经和大家分享了插入排序的基本思想、时间复杂度、空间复杂度、以及稳定性。这篇文章我们继续来学习选择排序!

2.选择排序

2.1基本思想

每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。

  • 在元素集合array[i]–array[n-1]中选择关键码最大(小)的数据元素
  • 若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换
  • 在剩余的array[i]–array[n-2](array[i+1]–array[n-1])集合中,重复上述步骤,直到集合剩余1个元素

2.2画图理解

选择排序

2.3单向选择排序代码实现

 public int[] selectOrder(int[] arr){for (int i=0;i<arr.length;i++){int min=i;//标记最小元素的坐标!!!for (int j=i+1;j<arr.length;j++){if(arr[j]<arr[min]){min=j;}}swap(i,min,arr);}return arr;}private void swap(int i, int j,int[] arr) {int tmp=arr[i];arr[i]=arr[j];arr[j]=tmp;}

2.4双向选择排序代码实现

 public int[] selectOrder2(int[] arr){int i=0;int j=arr.length-1;while (i<j){int min=i;//标记最小值int max=i;//标记最大值for (int a=i+1;a<=j;a++){if(arr[a]<arr[min]){min=a;}if(arr[a]>arr[max]){max=a;}}swap(i,min,arr);//防止第一个元素就是最大元素if (max==i){max=min;}swap(j,max,arr);i++;j--;}return arr;}

1. 时间复杂度:O( n 2 n^2 n2)
2. 空间复杂度:O(1)
3. 稳定性:不稳定

3.堆排序

3.1基本思想

堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。它是通过堆来进行选择数据。需要注意的是排升序要建大堆,排降序建小堆。

3.2画图理解

以升序为例:
在这里插入图片描述

3.3代码实现

public void createHeap(int[] arr){for (int parent=(arr.length-1-1)/2;parent>=0;parent--){shiftdown(parent,arr.length,arr);}}private void shiftdown(int parent,int size,int[] arr) {int child=2*parent+1;while (child<size){if (child+1<size&&arr[child+1]>arr[child]){child=child+1;}if (arr[child]>arr[parent]){swap(child,parent,arr);parent=child;child=2*parent+1;}else break;}}public int[] heapOrder(int[] arr){createHeap(arr);int end=arr.length-1;while (end>0){swap(0,end,arr);shiftdown(0,end,arr);end--;}return arr;}

时间复杂度:O(N l o g 2 n log_2^n log2n
空间复杂度O(1)
稳定性:不稳定
*

4 .总结

本篇文章主要介绍了选择排序,包括单向选择排序和双向选择排序,以及堆排序,希望同学们能够熟练掌握各种排序的时间复杂度,空间复杂度,和稳定性。

下期预告:快速排序

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

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

相关文章

【Linux网络】FTP服务

目录 一、FTP简介 1.FTP-文件传输协议 2.FTP的两种模式 二、安装配置FTP 1.安装环境 2.对文件的操作 3.切换目录 4.设置匿名用户 5.图形化界面登录 6.白名单与黑名单 重点与难点 一、FTP简介 1.FTP-文件传输协议 FTP是FileTransferProtocol&#xff08;文件传输协…

VIO外参标定方法总结

一、前言 VIO外参标定是指相机和IMU之间的转移矩阵的确定&#xff0c;包括33的旋转矩阵和3维平移向量。整体上分为离线标定和在线标定两类方法&#xff0c;这篇文章做一个总结&#xff0c;主要是经典的方法&#xff0c;记录其思想。 二、博文链接 1、离线标定方法 最基本的…

如何在TestNG中忽略测试用例

在这篇文章中&#xff0c;我们将讨论如何在TestNG中忽略测试用例。TestNG帮助我们忽略使用Test注释的情况&#xff0c;我们可以在不同的级别上忽略这些情况。 首先&#xff0c;只忽略一个测试方法或测试用例。第二&#xff0c;忽略一个类及其子类中的所有情况。第三个是&#…

ARCGIS PRO3 三维模型OSGB转SLPK场景数据集

1.前言 因项目工作&#xff0c;需要将三维模型发布到arcgisserver上&#xff0c;但arcgisserver只支持slpk格式的模型&#xff0c;于是我开启了漫长的三维模型格式转换之旅&#xff0c;在这里记录下本人踩过的坑。 2.三维模型数据情况 2.1 模型大小&#xff1a;在20GB以上&a…

ITMS-90426: Invalid Swift Support

原文 Please correct the following issues and upload a new binary to App Store Connect. ITMS-90426: Invalid Swift Support - The SwiftSupport folder is missing. Rebuild your app using the current public (GM) version of Xcode and resubmit it. 解决方式 ITMS-…

【禅道客户案例】同方智慧能源数智化转型新实践 禅道助力前行

同方智慧能源是同方股份有限公司的骨干企业。依托中核集团、清华大学的科技优势&#xff0c;坚持技术和资源双核驱动&#xff0c;基于30多年行业积淀&#xff0c;面向建筑、交通、工业、北方供热、数据中心等主要用能场景提供设计咨询、产品技术、投资建设、运营服务&#xff0…

河南新办灌溉排涝乙级资质预算分析

河南新办灌溉排涝乙级资质的预算分析是一个涉及多方面因素的综合考量。以下是对该预算的详细分析&#xff1a; 首先&#xff0c;人员费用是预算中的重要组成部分。这包括聘请符合资质要求的技术人员、工程师和其他相关人员的薪酬、社保等费用。这些费用会根据所需人员的数量、资…

使用工具速记

文章目录 一、sqlyoy登录账号信息迁移二、idea导入之前的已配置的idea信息三、设置windows UI大小四、其他 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、sqlyoy登录账号信息迁移 工具(sqlyog上面菜单栏)->导入导出详情->选择要导出的账号…

(学习日记)2024.04.20:UCOSIII第四十八节:各文件功能概览

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

你的网站还在使用HTTP? 免费升级至HTTPS吧

如果您的网站还在使用老的http协议&#xff0c;可以申请一个免费的SSL证书升级至https&#xff01; 具体步骤如下&#xff1a; 1 申请免费SSL证书 根据你的需求选择合适的SSL证书类型&#xff0c;如单域名证书&#xff0c;多域名证书、通配符证书 登录免费供应商JoySSL官网&…

【R语言实战】——kNN和朴素贝叶斯方法实战

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 文…

关于MySQL Command Line Client 运行闪退问题解决,my.ini文件内容

MySQL Command Line Client 运行闪退问题解决&#xff0c;缺少my.ini文件_通过下载msi安装mysql,双击打开mysql 8.2 command line client --CSDN博客 打开mysql Command Line Client 发现直接闪退&#xff0c;一直不明所以&#xff08;这里是没输密码&#xff0c;直接一闪而过…