【数据结构】选择排序

⭐ 作者:小胡_不糊涂
🌱 作者主页:小胡_不糊涂的个人主页
📀 收录专栏:浅谈数据结构
💖 持续更文,关注博主少走弯路,谢谢大家支持 💖

直接选择、堆排序

  • 1. 直接选择排序
  • 2. 堆排序

在这里插入图片描述

1. 直接选择排序

基本思想: 先在元素集合array[0]–array[n]中选择关键码最小(大)的数据元素,若它不是这组元素中的第一个(第一个)元素,则将它与这组元素中的第一个(第一个)元素交换,然后在剩余的array[1]–array[n]集合中,重复上述步骤,直到集合剩余1个元素。
在这里插入图片描述
代码实现:

/*** 选择排序:* 时间复杂度:O(n^2)* 空间复杂度:O(1)* 稳定性:不稳定的排序* @param array*/public static void selectSort(int[] array){for(int i=0;i<array.length;i++){int minindex=i;for(int j=i+1;j<array.length;j++){if(array[j]<array[minindex]){minindex=j;}}//交换元素int k=array[minindex];array[minindex]=array[i];array[i]=k;}}

2. 堆排序

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

第一步:采用向下调整方法建大根堆

public static void createHeap(int[] array){for(int parent=(array.length-1-1)/2;parent>=0;parent--){shiftDown(array,parent,array.length);}}public static void shiftDown(int[] array,int parent,int length){int child=parent*2+1;//左孩子节点while(child<length){// 如果右孩子存在,找到左右孩子中较大的孩子,用child进行标记if(child+1<length && array[child]<array[child+1]){child=child+1;}if(array[child]>array[parent]){// 将双亲与较大的孩子交换int k=array[child];array[child]=array[parent];array[parent]=k;// parent中小的元素往下移动,可能会造成子树不满足堆的性质,因此需要继续向下调整parent=child;child=2*parent+1;}else{break;}}}

第二步:排序

/*** 时间复杂度:O(N*logN)* 空间复杂度:O(1)* 稳定性:不稳定的排序* @param array*/public static void heapSort(int[] array){createHeap(array);int end=array.length-1;while(end>0){int k=array[0];array[0]=array[end];array[end]=k;shiftDown(array,0,end);end--;}}

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

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

相关文章

IconWorkshop 6软件官方下载:制作ICO/ICON图标、编辑、转换图标

我们都知道在这个版本中&#xff0c;你甚至能够打开 Macintosh(R) 图标并将其转换为 Win(R) 格式。我们必须承认加强的与 Adobe(R) 和 Jasc(R) 色彩文件相兼容的色板和调色板管理系统。可以说这些功能随时都方便易用&#xff1a;内置的浏览器能够用缩略图的形式浏览文件&#x…

AI视觉领域流媒体知识入门介绍(一)

流媒体常见传输协议 RTSP&#xff08;Real-Time Streaming Protocol&#xff09; 是一种网络流媒体传输协议&#xff0c;可用于从网络摄像头等设备中获取实时视频流。许多网络摄像头和视频服务器都支持RTSP协议。 HLS&#xff08;HTTP Live Streaming&#xff09; 是一种基于H…

【PC】2023年10月商店更新-闲游盒

亲爱的玩家朋友们&#xff0c;大家好&#xff01; 欢迎大家来到2023年第十次商店更新&#xff01; 万圣节即将到来&#xff0c;为了让大家可以在万圣节盛装出席&#xff0c;我们在10月商店更新中准备了邪恶诅咒&#xff0c;PGC 2023的专属宝物&#xff0c;以及RASH悲喜强势回归…

tomcat必要的配置

tomcat要配置两个&#xff0c;不然访问不了localhost:8080 名&#xff1a;CATALINA_HOME 值&#xff1a;D:\software\computer_software\Tomcat\tomcat8.5.66

Zynq UltraScale+ XCZU5EV 纯VHDL解码 IMX214 MIPI 视频,2路视频拼接输出,提供vivado工程源码和技术支持

目录 1、前言免责声明 2、我这里已有的 MIPI 编解码方案3、本 MIPI CSI2 模块性能及其优越性4、详细设计方案设计原理框图IMX214 摄像头及其配置D-PHY 模块CSI-2-RX 模块Bayer转RGB模块伽马矫正模块VDMA图像缓存Video Scaler 图像缓存DP 输出 5、vivado工程详解PL端FPGA硬件设计…

ffmpeg 视频转图片 图片集转视频

可以使用FFmpeg将视频转换为图片序列&#xff0c;然后将图片序列合成为视频。 以下是一些基本的FFmpeg命令示例来执行这些操作&#xff1a; 1. 将视频转化为图片序列&#xff1a; ffmpeg -i input_video.mp4 -vf "fps30" output_images/image%04d.png 这个命令将…

多线程---线程池

文章目录 什么是线程池&#xff1f;线程池的实现标准库中的线程池&#xff08;四种&#xff09;自己实现一个线程池 线程池支持的参数在实际的开发中&#xff0c;线程池的线程数如何确定&#xff1f; 什么是线程池&#xff1f; 线程诞生的原因就是进程太“重量”了。虽然线程的…

【洛谷算法题】P5709-Apples Prologue / 苹果和虫子【入门2分支结构】

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5709-Apples Prologue / 苹果和虫子【入门2分支结构】&#x1f30f;题目描述&am…

JS中迭代器的介绍

1、简介 迭代器&#xff08;iterator&#xff09;&#xff0c;使用户在容器对象&#xff08;container&#xff0c;例如链表或数组&#xff09;上遍访的对象&#xff0c;使用该接口无需关心对象的内部实现细节。迭代器&#xff08;iterator&#xff09;是一个结构化的模式&…

leetcode-哈希表

1. 理论 从哈希表的概念、哈希碰撞、哈希表的三种实现方式进行学习 哈希表&#xff1a;用来快速判断一个元素是否出现集合里。也就是查值就能快速判断&#xff0c;O&#xff08;1&#xff09;复杂度&#xff1b; 哈希碰撞&#xff1a;拉链法&#xff0c;线性探测法等。只是一种…

JAVA同城服务智慧养老小程序怎么开发?

随着人口老龄化的加剧&#xff0c;智慧养老成为了社会关注的焦点。智慧养老小程序作为一种便捷、高效的服务工具&#xff0c;为老年人提供了更全面、个性化的服务。本文将介绍如何使用JAVA编程语言开发一款同城服务智慧养老小程序。 一、设计思路 界面设计&#xff1a;小程序…

进程(详解)

进程 进程PCB进程的定义进程的组成进程模式进程的状态进程的运行进程的创建进程的结束孤儿进程僵尸进程僵尸进程的危害 进程的创建pidforkwait案例 进程 PCB 从操作系统理解进程概念-------先描述&#xff0c;后组织 为了使参与并发执行的程序能独立的运行&#xff0c;必须为之…

H5游戏源码分享-接苹果游戏拼手速

H5游戏源码分享-接苹果游戏拼手速 看看在20秒内能接多少个苹果 <html> <head><title>我是你的小苹果</title><meta charset"utf-8"/><meta name"viewport" content"initial-scale1, user-scalableno, minimum-scale…

浅谈数据治理(一)

治理工作如何对接下游推进 1.让下游配合最重要的是调动积极性&#xff0c;让下游感觉到治理能对他们起作用 或者说能让业务方也能做大蛋糕&#xff0c;因为数据治理对于下游来说可有可无 没你数据治理 下游数据模型不也跑的没问题嘛&#xff0c;所以就如花姐刚才说的该警告的警…

【ARM 嵌入式 C 入门及渐进 10 -- 冒泡排序 选择排序 插入排序 快速排序 归并排序 堆排序 比较介绍】

文章目录 排序算法小结排序算法C实现 排序算法小结 C语言中常用的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序。下面我们来一一介绍&#xff1a; 冒泡排序&#xff08;Bubble Sort&#xff09;&#xff1a;冒泡排序是通过比较相邻元素的大小进行排…

LeetCode75——Day20

文章目录 一、题目二、题解 一、题目 2215. Find the Difference of Two Arrays Given two 0-indexed integer arrays nums1 and nums2, return a list answer of size 2 where: answer[0] is a list of all distinct integers in nums1 which are not present in nums2. an…

本机spark 通idea连接Oracle的坑

1. 报错&#xff1a;Exception in thread "main" java.lang.NoSuchMethodError: scala.Product.$init$(Lscala/Product;)V 查询网上资料&#xff0c;是idea引入的scala运行环境版本与idea默认的scala版本不一样 也就是写的项目中的pom的spark版本与idea默认的版本不…

【设计模式】第4节:创建型模式之“单例模式”

一、介绍 采取一定的方法保证在整个的软件系统中&#xff0c;对某个类只能存在一个对象实例&#xff0c;并且该类只提供一个取得其对象实例的方法。 不使用单例模式的UML类图&#xff1a; 使用单例模式的UML类图&#xff1a; 使用场景&#xff1a; 需要频繁创建或销毁的对象…

H5游戏分享-烟花效果

<!DOCTYPE html> <html dir"ltr" lang"zh-CN"> <head> <meta charset"UTF-8" /> <meta name"viewport" content"widthdevice-width" /> <title>点击夜空欣赏烟花</title> <sc…

Zabbix监控oxidized备份状态

Zabbix监控oxidized备份状态 原理是利用oxidized的hooks功能调用zabbix_sender推送数据给zabbix_server 参考 https://cloud.tencent.com/developer/article/1657025 https://github.com/clontarfx/zabbix-template-oxidized https://github.com/ytti/oxidized/blob/master/…