【算法】选择排序
选择排序
- 选择排序
- 代码实现
- 代码优化
排序: 排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。
稳定性: 假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中, r[i] = r[j], 且 r[i] 在 r[j] 之前,而在排序后的序列中, r[i] 仍在 r[j] 之前,则称这种排序算法是稳定的;否则称为不稳定的。
(注意稳定排序可以实现为不稳定的形式, 而不稳定的排序实现不了稳定的形式)
内部排序: 数据元素全部放在内存中的排序。
外部排序: 数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。
选择排序
选择排序(Selection Sort)是一种简单的排序算法,其基本思路可以描述为:
-
初始状态: 将待排序的数据分为两部分,一部分是已排序的部分(初始为空),另一部分是未排序的部分(初始包含所有元素)。
-
找到最小元素: 在未排序部分中,找到最小的元素,将其与未排序部分的第一个元素交换位置,即将最小元素放到已排序部分的末尾。
-
重复步骤: 继续以上步骤,每次在未排序部分中找到最小的元素,并将其交换到已排序部分的末尾,逐渐将所有元素都移动到已排序部分。
-
完成排序: 当未排序部分没有元素时,排序完成,整个数据集已经按照升序(或降序)排列好了。
选择排序的核心思想是在未排序的部分中选择最小的元素,并将其放到已排序部分的末尾,逐步缩小未排序部分的范围,直到整个数据集排序完成。选择排序的时间复杂度为O(n^2),不适用于大型数据集。
代码实现
public static void selectSort(int[] arr) {int len = arr.length;for (int i = 0; i < len-1; i++) {// 假设未排序部分的第一个元素为最小int minIndex = i;// 找到未排序部分中的最小的元素for (int j = i+1; j < len; j++) {if (arr[j] < arr[minIndex]) {minIndex = j;}}if (minIndex != i) {// 将最小元素放到未排序的最前面int temp = arr[i];arr[i] = arr[minIndex];arr[minIndex] = temp;}}}
代码优化
优化一:
同时选择最大值和最小值
public static void selectSort2(int[] arr) {int len = arr.length;int left = 0;int right = len - 1;while (left < right) {// 同时记录最大值和最小值的下标int minIndex = left;int maxIndex = left;// 找未排序区间中的最大值和最小值的下标for (int i = left + 1; i <= right; i++) {if (arr[i] < arr[minIndex]) {minIndex = i;}if (arr[i] > arr[maxIndex]) {maxIndex = i;}}// 确定最大值和最小值swap(arr, left, minIndex);// 当 left 下标对应的值就是最大值时, 上面这个 swap 有可能把 最大值的位置换到最小值的位置if (left == maxIndex) {maxIndex = minIndex;}swap(arr, right, maxIndex);// 未排序的区间减小left++;right--;}}public static void swap (int[] arr, int index1, int index2) {int temp = arr[index1];arr[index1] = arr[index2];arr[index2] = temp;}
虽然性能有提升, 但是时间复杂度还是 O(N*N)
优化二:
堆排序是一种树形选择排序,是对直接选择排序的有效改进。
堆排序详解
总结:
- 时间复杂度: O(N*N)
- 空间复杂度: O(1)
- 是不稳定排序: 举个例子,序列arr = [5 8 5 2 9],我们知道第一遍选择第1个元素5会和2交换,那么原序列中两个5的相对前后顺序就被破坏了,所以选择排序是一个不稳定的排序算法。
- 对数据不敏感: 没有好坏之分, 不管数据原本的分布情况, 每层循环都需要遍历一遍, 直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用。
以上就是对选择排序的讲解, 希望能帮到你 !
评论区欢迎指正 !
相关文章:
![](https://img-blog.csdnimg.cn/5cff7ee2b9c64309bd4b54e05a995af5.gif)
【算法】选择排序
选择排序 选择排序代码实现代码优化 排序: 排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性: 假定在待排序的记录序列中,存在多个具有相同的关键字的记录&…...
![](https://www.ngui.cc/images/no-images.jpg)
golang之context实用记录
简言 WithCancel()函数接受一个 Context 并返回其子Context和取消函数cancel 新创建协程中传入子Context做参数,且需监控子Context的Done通道,若收到消息,则退出 需要新协程结束时,在外面调用 cancel 函数,即会往子C…...
![](https://img-blog.csdnimg.cn/img_convert/23f8e7fbb5ec1ef99ac5c09f175885bd.png)
音视频FFmpeg简单理解学习,必学技术
FFmpeg是一个开源的多媒体框架,它包含了一个用于音频和视频编解码的库。它可以执行各种多媒体操作,如格式转换、视频剪辑、音频处理等。可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。 FFmpeg的结构 默认的编译会生成…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8)
一款内网信息收集利用工具
FuckDomainMini 简介 这是一款基于java开发Windows的内网信息收集、利用工具 可以节省您的信息收集所花费的,又或者是做免杀所花费的时间 现在这个版本是先行版本,目前先行版只有一个功能,更多的功能还在调试与开发中。 尽情期待&#x…...
![](https://img-blog.csdnimg.cn/73a8ad2dd75142a994d03b6a67947501.png)
数据库表的操作
目录 一、表的创建 1、创建语法 2、创建案例 二、查看表结构 三、修改表 1、修改表名 2、添加记录 3、修改列属性 4、添加列(字段) 5、删除列(字段) 6、修改列名字 四、删除表 五、修改表结构的风险 1、风险 2、建议 一、表的创建…...
![](https://www.ngui.cc/images/no-images.jpg)
Golang开发--channel的使用
在 Go 语言中,channel(通道)是一种用于在 goroutine 之间进行通信和同步的并发原语。它提供了一种安全且简单的方式来传递数据。 通道的详细描述和使用方法 1.定义通道: 通道是通过使用 make 函数来创建的。通道有特定的类型&am…...
![](https://img-blog.csdnimg.cn/a8f9329741ee4ee3bd98f18b551c1a4f.png)
SQL sever中表管理
目录 一、创建表: 1.1语法格式: 1.2示例: 二、修改表: 2.1语法格式: 2.2示例: 三、删除表: 3.1语法格式: 3.2示例: 四、查询表: 4.1语法格式&…...
![](https://www.ngui.cc/images/no-images.jpg)
CSSoverflow 属性
overflow 属性用于设置当元素中的内容溢出后的情况。 值得注意的是: 所谓溢出,是指子元素的大小(包括文本、元素或图片等)超出父元素的区域,会有一部分内容显示在父元素所在的区域外。 属性值描述visible默认值。内容不会被修剪&a…...
![](https://img-blog.csdnimg.cn/64cfe26aa76d4f1e9143e241d9d08117.png)
08:STM32----DMA数据转运
目录 1:简历 2:存储器映像 3:DMA基本结构 4: DMA转运的条件 5:DMA请求 A:DMA数据转运 1:连接图 2:数据转运DMA 3:函数介绍 4:步骤 5:代码 B:DMAAD多通道 1:连接图 2:结构图 3:函数介绍 4:代码 1:简历 DMA(Direct Memory Access)直接存储…...
![](https://www.ngui.cc/images/no-images.jpg)
Golang 程序漏洞检测利器 govulncheck(二):漏洞数据库详解
上一篇文章详细介绍了 Golang 程序漏洞扫描工具 govulncheck 的使用方法,govulncheck 强大功能的背后,离不开 Go 漏洞数据库(Go vulnerability database)的支持,接下来详细讲解下 Go 漏洞数据库相关的知识。 Go 漏洞数…...
![](https://img-blog.csdnimg.cn/c02ef767a9e743068b4ff6034a46cb21.png)
[JDK8下的HashMap类应用及源码分析] 数据结构、哈希碰撞、链表变红黑树
系列文章目录 [Java基础] StringBuffer 和 StringBuilder 类应用及源码分析 [Java基础] 数组应用及源码分析 [Java基础] String,分析内存地址,源码 [JDK8环境下的HashMap类应用及源码分析] 第一篇 空构造函数初始化 [JDK8环境下的HashMap类应用及源码分…...
![](https://img-blog.csdnimg.cn/5c019e46cc3849c0aaab9404a8514098.png)
高等数学刷题
两个公式本质都是相同的 Π/2 1^∞类型...
![](https://www.ngui.cc/images/no-images.jpg)
lintcode 1840 · 矩阵还原【中等 vip 二维前缀和数组】
题目 https://www.lintcode.com/problem/1840 现有一个n行m列的矩阵 before,对于before里的每一个元素 before[i][j],我们会使用以下算法将其转化为 after[i][j]。现给定after矩阵,请还原出原有的矩阵before。s 0 for i1: 0 -> ifor j1…...
![](https://img-blog.csdnimg.cn/5a07527dcf344da9b56c2893c23d8b15.png)
VMware虚拟机+Centos7 配置静态,动态IP
本章目录 一、查看网关: 编辑–>虚拟网络编辑器二、点击NAT设置三、记住网关IP待会要用四、配置静态ip地址1、进入存放修改IP地址的目录2、修改ip地址的文件3、编辑文件4、文件(编辑好后退出) 五、重启网络六、测试1、linux上查看IP地址的…...
![](https://img-blog.csdnimg.cn/bf665b4e795846b9b86ef94cb3e03a64.png)
【C++精华铺】10.STL string模拟实现
1. 序言 STL(标准模板库)是一个C标准库,其中包括一些通用的算法、容器和函数对象。STL的容器是C STL库的重要组成部分,它们提供了一种方便的方式来管理同类型的对象。其中,STLstring是一种常用的字符串类型。 STLstrin…...
![](https://img-blog.csdnimg.cn/6d76761bf87d46eca42c03db3f3a8688.png)
微信小程序开发---事件的绑定
目录 一、事件的概念 二、小程序中常用的事件 三、事件对象的属性列表 四、bindtap的语法格式 (1)绑定tap触摸事件 (2)编写处理函数 五、在事件处理函数中为data中的数据赋值 六、事件传参 七、bindinput的语法格式 八、…...
![](https://img-blog.csdnimg.cn/8f5207760b1d4aba8e74c7a99abf7be9.png)
基于Hata模型的BPSK调制信号小区覆盖模拟matlab完整程序分享
基于Hata信道模型的BPSK调制信号小区覆盖模拟matlab仿真,对比VoIP, Live Video,FTP/Email 完整程序: clc; clear; close all; warning off; addpath(genpath(pwd)); % Random bits are generated here. bits randi([0, 1], [50,1]); M 2; t 1:1:50; …...
![](https://www.ngui.cc/images/no-images.jpg)
音视频 ffmpeg视频裁剪
将输入视频帧的宽度和高度从x和y值表示的位置裁剪到指定的宽度和高度;x和y是输出的左上角坐标,协调系统的中心是输入视频帧的左上角。 如果使用了可选的keep_aspect参数,将会改变输出SAR(样本宽比)以补偿新的DAR(显示长宽比) cropow[:oh[:x[:y[:keep_as…...
![](https://img-blog.csdnimg.cn/eaec6433671c41b38b856cd83dc0acb8.png)
Web3数据云OORT推出商用版智能代理构建平台:OORT TDS
随着技术进步和数据隐私问题的日益凸显,生成式AI和去中心化技术联手为企业和个人开辟了全新的互动视野。站在这一趋势的前沿,OORT展现了其在去中心化数据云领域的技术实力,作为行业的领先者,今日Oort正式宣布OORT TDS (Talk-to-Da…...
![](https://www.ngui.cc/images/no-images.jpg)
ChatGPT:革命性的自然语言处理技术
自然语言处理(NLP)技术的快速发展已经为我们的日常生活带来了巨大的变革。在这个领域,ChatGPT作为一个突出的代表,正在为我们带来更多的便利和机会。本文将介绍ChatGPT的基本概念、应用领域以及它在未来可能带来的影响。 ChatGPT…...
![](https://img-blog.csdnimg.cn/818bb5656db24ceba932fe8b0a9b2418.png)
利用frps搭建本地自签名https服务的透传
nginx的搭建就不介绍了,教程很多,基本上油手就会。 在本例中,frp服务器的域名是 www.yourfrp.com,同时也是反向代理nginx服务器; 本地网站要用的域名: test.abcd.com 请事先将 test.abcd.com 解析到 frp所在服务器…...
![](https://www.ngui.cc/images/no-images.jpg)
安卓手机安装Linux然后在其中安装(jdk,MySQL,git)
安卓手机安装Linux然后在其中安装(jdk,MySQL,git) 一.安卓手机安装Linux 安装termux最新教程_哔哩哔哩_bilibili Linux入门教程__阿伟_的博客-CSDN博客 二.安装jdk Termux手机终端运行java。jdk环境的搭建_哔哩哔哩_bilibili java后端__阿伟_的博客-CSD…...
![](https://img-blog.csdnimg.cn/9cbd8fadebda4d078bef22e7f35690c5.png)
javaee之黑马乐优商城2
简单分析一下商品分类表的结构 先来说一下分类表与品牌表之间的关系 再来说一下分类表和品牌表与商品表之间的关系 面我们要开始就要创建sql语句了嘛,这里我们分析一下字段 用到的数据库是heima->tb_category这个表 现在去数据库里面创建好这张表 下面我们再去编…...
![](https://img-blog.csdnimg.cn/7b1c6f3f33a1496fa27867ce82a24549.png)
Qt打开及创建项目,运行程序(1)
安装之后, 1.文件->新建文件或项目 2.Application->Qt Widgets Application 3.自己设置名称和路径 4.这一步非常非常重要,要选择编译器,(MinGW是可以在Qt里用,如果想与VS交互,要选择MSVC)…...
![](https://img-blog.csdnimg.cn/img_convert/95e5fcb8a07cf23ddc7c4bbc19257d0e.png)
八种十倍提升API性能的方式
提起API,作为程序员来说并不陌生,很多程序员的大部分工作都是围绕着它, 然而,有些内容被大家忽略,API的性能会直接影响产品的用户体验,比如,一个视频软件,播放1s后需要加载5s&#x…...
![](https://img-blog.csdnimg.cn/2c73c16d864542e98e4626a5179a4156.png)
pg_database中的datlastsysoid
一,关于 pg_database 在 PostgreSQL 中,对于在数据库集群内创建的每个数据库,其关键信息都会被保存到 pg_database 系统表中。 PostgreSQL 确保通过 pg_database 系统表持久化存储每个数据库的属性信息,以方便后续管理和使用。这也让 pg_da…...
![](https://img-blog.csdnimg.cn/5f14c3f33eb34bab9daf58dd3297c675.png)
【已解决】ognl.PropertyAccessor
在Spring boot2.x用TemplateEngine处理数据得时候,出现以下错误: 定位到代码行: 解决办法:修改thymeleaf的依赖: <!-- thymeleaf --><dependency><groupId>org.thymeleaf</groupId><…...
![](https://img-blog.csdnimg.cn/5759b8d11b694bffbacf3b1d14132985.png)
Pytest系列-快速入门和基础讲解(1)
前言 目前有两种纯测试的测试框架,pytest和unittestunittest应该是广为人知,而且也是老框架了,很多人都用来做自动化,无论是UI还是接口pytest是基于unittest开发的另一款更高级更好用的单元测试框架 单元测试框架介绍 单元测试…...
![](https://img-blog.csdnimg.cn/9749212d1d014edf85a86c3a7ade216a.png)
微信小程序实现连续签到七天
断签之后会从第一天重新开始 <template><view class"content" style"height: 100vh;background: white;"><view class"back"><view style"position: absolute;bottom: 200rpx;left: 40rpx;width: 90%;"><i…...
![](https://img-blog.csdnimg.cn/img_convert/7ba2b75f617d9d90efd4f2679b47348d.gif)
将 Spring Boot 应用程序与 Amazon DocumentDB 集成
Amazon DocumentDB(与 MongoDB 兼容)是一种可扩展、高度持久和完全托管的数据库服务,用于操作任务关键型 MongoDB 工作负载。在 Amazon DocumentDB 上,您可以使用相同的 MongoDB 应用程序代码、驱动程序和工具来运行、管理和扩展工…...
![](https://img-blog.csdnimg.cn/2020083012432156.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMwODAzMzUz,size_16,color_FFFFFF,t_70#pic_center)
做动漫短视频网站/企业营销案例
访谈问题 问题描述:房间共享公司(如Airbnb)希望帮助客房供应商 他们的房间价格合理。其中一个关键步骤是建立一个模型来预测 在一定条件下,一个房间的购买概率(由某些特征和日期描述) 数据发布在:三态电子商务公司算法岗面试题 (培训5万人次,测试数据2万人次) 目标…...
![](/images/no-images.jpg)
amazon wordpress/沈阳专业网站seo推广
当两个人的感情破裂之后,可能会走向离婚的地步,这时是需要处理财产问题的,比如说房产怎么分配,谁获得产权,如何补偿对方等等,那么民法典离婚怎么判决无产权证房产呢?小编已经整理了如下的内容供大家做法律…...
![](/images/no-images.jpg)
个人域名可以做网站吗/百度怎么推广自己的视频
原文参考: https://blog.csdn.net/u014568921/article/details/52816578人脸检测长文干货!走近人脸检测:从 VJ 到深度学习(上)长文干货!走近人脸检测:从VJ到深度学习(下)…...
![](/images/no-images.jpg)
广州市专业做网站/外贸获客软件
css 选择器 1- 基础选择器 1- ID选择器 // #id 2- 类名选择器 // .class 3- 元素选择器 // element 4- 全局选择器 // * 5- 并集选择器selector1,selector2 //选择满足选择器1条件的元素,也选择满足选择器2条件的元素,一起选择到统一…...
网站建设服务哪家好/免费入驻的跨境电商平台
Play on Words UVA - 10129 题意:给出一些单词,问能否让首尾字母相同的字符串相连,最后形成一个串。 思路:不难看出,这是一个欧拉道路问题。 简单介绍一下欧拉道路: 在欧拉道路中,除了起点和终…...
![](https://img-blog.csdnimg.cn/img_convert/f382b4b6f581f1483355f6908014dd47.png)
合肥网站建设制作公司/西安百度首页优化
内容:OMV在windows10下的文件共享--NAS基本条件Armbian的IP设置 以太网及WiFitransmission配置遇到的问题OMV在windows10下的文件共享--NAS基本条件看了好几个教程都有一些问题,目前找到可以的,参考链接哔哩哔哩-教你完成一台基于开源系统OMV…...