算法学习笔记(2)-选择排序

【排序算法】选择排序 选择排序 文章目录选择排序@[toc]思路具体实现算法性能分析时间复杂度稳定性参考实现优化参考文献 思路 遍历整个数组,找到最小的元素,与数组第一个元素交换,再找到第二小的元素,与数组第二个元素交换,以此类推,直到数组全部排序。 具体实现 算法性能分析 时间复杂度 选择排序的交换操作介于 0 和 (n - 1) 次之间。 选择排序的比较操作为 n (n - 1) / 2 次之间。 选择排序的赋值操作介于 0 和 3 (n - 1) 次之间。 比较次数O(n^2),比较次数与关键字的初始状态无关,总 阅读详情

    选择排序(Select Sort)的思想是,在比较开始前将最小值假定为第一个数,在每轮循环的比较中找出最小的那个数,将其放到数组的前面。 

Java代码:

public class SelectSort {
	public static void main(String[] args) {
		int[] array = {7,5,3,8,4,1,3,61,13,31,11,3};
		System.out.println("选择排序前:");
		for(int arr:array){
			System.out.print(arr+" ");
		}
		
		//为选择排序定义一个最小值的索引minIndex=0,即第一个数
		int minIndex = 0;
		 for(int i = 0; i <array.length ;i ++){
			 //从第二个数开始判断,将最小数的索引记录下来,因为前者的已经排序好了
			 for(int j = i + 1;j < array.length;j ++){
				 //如果其他的数小于第一个数,那么将这个数的索引和值记录下来
				 if(array[j] < array[minIndex]){
					 //将最小数的索引j赋值给minIndex
					 minIndex = j;
				 }
			 }
			 //将最小数和第1个数交换(第2、3、4、、、)
			 int temp = array[minIndex];
			 array[minIndex] = array[i];
			 array[i] = temp;
			 //将最小数的索引假定为第i+1个
			 minIndex = i + 1;
		 }
			//输出选择排序的结果
				System.out.println("\n"+"选择排序的结果为:");
				for(int arr:array){
					System.out.print(arr+" ");
				}
	}	
}

 

结果:

 

动画演示:

https://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html

 

思考:

1、选择排序和冒泡排序的时间复杂度都为O(N^2),但是没一轮循环只需要交换一个数,而冒泡排序在每一轮循环都要交换至少一个数,所以选择排序在时间上会优于冒泡排序。

2、选择排序需要指定第1个数为最小数,在循环完后,将第一个数与真正的最小数交换,第二轮循环要假设第2个数为最小数,而不是第1个数为最小数,因为已经判断完了,第1个数一定是最小数了,接下来的循环也同理,每次循环前要将最小数的索引往后推移一位。

 

 

 

 

 

排序算法之 选择排序 选择排序   选择排序(Selection Sort)的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。   常用的选择排序方法有简单选择排序和堆排序。 简单选择排序 在介绍选择排序算法前,我们再回顾下冒泡算法。 冒泡算法是通过两两比较,不断交换,逐个推进的方式,来进行排序的。 一次遍历,得...... 阅读详情

相关推荐

算法——选择排序

选择排序(Selection Sort)是一种简单直观的排序算法,它每次从未排序的序列中选择最小(或最大)的元素,并将其放到已排序序列的末尾(或开头)。这个过程类似于每次从桌面上选出最小的一张牌,然后放到手中已有牌的一端。选择排序的基本思想是通过多次遍历未排序序列,每次选择出当前未排序序列的最小(或最大)元素,然后与未排序序列的第一个元素进行交换,将已排序序列的长度逐渐增加,直到整个序列排序完成。选择排序的实现通常使用两层嵌套的循环。

百锦再的博客 1万+

玩转算法面试-- Leetcode真题分门别类讲解

如何“正确”的回答一个算法问题 对一组数据进行排序: 1、这组数据有什么样的特征?     • ①有没有可能包含有大量重复的元素?     如果有这种可能的话,三路快排是更好的选择(Java种快排的基本实现就是使用三路快排)。     • ②是否大部分数据距离它正确的位置很近?是否近乎有序?     如果是这样的话,插入排序是更好的选择(如对银行的业务按照业务发生的时间进行排序,大多数业务先发生也...

weixin_43608645的博客 1602

leetCode 面试高频算法整理-2020

2020高频面试算法整理 leetcode ,18个大类,80+到常见算法题。 1.热身题|1)查找唯一数字|2)查找N/2数字|3)判断数字是否存在|4)合并二叉树|5)泡鸡蛋问题|2.互联网公司最常见的面试算法题有哪些?|3.TOP INTERVIEW QUESTIONS (热门面试问题)|4.模拟|1)加油站|2)LRU缓存机制|3)快乐数|4)生命游戏|5)两整数之和|6)FIZZ BUZZ|5.数组|1)乘积最大子序列|2)求众数|3)旋转数组|4)存在重复元素|5)移动零|6)打乱数组|7)两个数组的交集 II|8)递增的三元子序列|9)搜索二维矩阵 II|10)除自身以外数组的乘

LeetCode教程目录

关于本教程本教程基于作者自身刷LeetCode的经历而写成。里面根据问题的名字建立了很多markdown文档,分别对应不同的LeetCode问题。写的不好的地方还请大家指出。能供大家在写不出来的时候能有一个参考思路我就满足了。

stormlin 1106

FPGA_AD9361实战

1.参考网站。

Pual_Georg的博客 750

LIGGGHTS颗粒模拟入门:从DEM原理到工程实践

离散元法(DEM)是一种用于模拟颗粒物质行为的数值方法,其核心原理是通过计算每个颗粒的运动和相互作用来预测颗粒系统的宏观行为。该方法基于牛顿第二定律和接触力学模型,能够精确描述颗粒间的碰撞、摩擦和粘结等微观机制。在工程实践中,DEM技术为优化工业设备设计、预测材料流动和减少实验成本提供了重要价值。它广泛应用于制药造粒、矿石破碎、粉体输送和农业加工等领域,帮助工程师和研究人员深入理解颗粒系统的复杂动力学。LIGGGHTS作为一款基于LAMMPS的开源DEM软件,继承了其高效的并行计算架构,并针对颗粒模拟进行了

weixin_33979203的博客 420

算法面试

常见排序算法及复杂度 https://www.cnblogs.com/onepixel/articles/7674659.html 如何遍历一棵二叉树 public class Tree { private Node root; private List<Node> list=new ArrayList<Node>(); public Tre...

zgsxhdzxl的博客 583

从维纳滤波到Richardson-Lucy:图像去模糊算法的原理与实践

本文深入解析了图像去模糊的核心原理,重点对比了维纳滤波与Richardson-Lucy两种经典去卷积算法。维纳滤波在频域进行快速权衡,适用于高斯噪声场景;而Richardson-Lucy算法基于泊松噪声模型迭代优化,更适用于天文、显微等科学成像。文章通过Python代码实践,详细阐述了PSF(点扩散函数)的关键作用及算法选型指南。

weixin_29285605的博客 386

《算法图解》学习笔记—第2章 选择排序

第2章 选择排序 2.1内存的工作原理 fe0ffeeb是一个内存单元的地址。 需要将数据存储到内存时,你请求计算机提供存储空间,计算机给你一个存储地址。需要存储多项数据时,有两种基本方式——数组和链表。 2.2 数组和链表 有时候,需要在内存中存储一系列元素。假设你要编写一个管理待办事项的应用程序,为此需要将这些待办事项存储在内存中。 使用数组意味着所有待办事项在内存中都是相连的(紧靠在一起的)。再添加代办事项时,需要请求计算机重新分配一块可容纳4个待办事项的内存,再将所有待办事项都移到那里。 链表

weixin_38615776的博客 169

openEuler 欧拉 安装Oracle19c数据库RPM包安装

欧拉系统安装部署oracle 19c rpm方式

陈苏漾的IT生涯 6895

CANoe LIN一致性测试之干扰测试Test moudle_LIN Disturbance Block

注意:相邻两个显隐性不同的bit不允许干扰,例如我同时选择bit6和bit7,相邻两个同显隐性的bit允许干扰,例如当我选择bit3和bit4,项,这里我选择ID:为0x2F(PID:0x6F)的frame。需按照具体测试规范实施干扰项,帧头和数据段都可以实现干扰。最近发现一个干扰测试模块,下面是一些具体使用方法。选择干扰项:PID的奇偶校验位(一致性测试干扰测试之手动测试。一个待测试frameD。

yuanyikangkang的博客 3413

《算法导论》学习笔记之Chapter 2-2.1,2.2,2.3插入排序,选择排序,归并排序

本来想写所谓的学习笔记,想来想去还是觉得直接记录自己在学习过程中编写的代码更靠谱。下面就闲话少说,参考文中给的伪代码,用自己熟悉的语言实现。 1:插入排序 package com.clrs.test; public class InsertSort { public static void main(String[] args) { // TODO Auto-generated me

u010483897的博客 374

糖尿病预测(深度学习pytorch实现-最新)

本次做的项目是糖尿病的预测,也是来自kaggle上面的一个小项目。根据一个人的怀孕次数、血糖、血压、皮肤厚度、胰岛素指标、身体质量指数、糖尿病谱系指数、年龄等身体参数来预测一个人是否患有糖尿病。

NangoGreen的博客 5360

《Algorithms》(4th Edition)学习笔记——初级排序算法

1、选择排序package ElementarySorts; import algorithms.StdIn; import algorithms.StdOut; public class Selection { public static void sort(Comparable[] a){ int N = a.length; for(int i = 0; i < N; i++)

JohnnieLULU的博客 407

一篇文章足够你学习Bluez,提供史上最全的Bluez教程,让你告别Bluez从入门到放弃

Bluez是真的难,说“入门到放弃”真的毫不夸张,Bluez的学习曲线陡峭,要求对Linux 系统/驱动概念、D-Bus 通信和蓝牙协议都有要求,加上网络上其实没有一个完整的介绍Bluez系列的文档,所以不管是蓝牙初学者还是蓝牙从业人员,都有不小的难度。

朝气蓬勃 2541

如何使用事务码SMICM分析ABAP代码发起的HTTP请求的错误

当我用CL_HTTP_CLIENT往一个外网的url发请求时,遇到错误:ICM_HTTP_SSL_PEER_CERT_UNTRUSTED 错误是从这段ABAP代码里抛出来的: CALL METHOD lo_http_client-&gt;get_last_error IMPORTING code = lv_sysubrc message = ev_error_message. "BREAK-...

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3209

【排序算法】选择排序、堆排序

堆排序是一种基于堆(Heap)数据结构的排序算法。最大堆:每个节点的值都大于或等于其子节点的值。根节点是最大值。最小堆:每个节点的值都小于或等于其子节点的值。根节点是最小值。首先将无序数组构建为一个最大堆。然后,将堆顶(即最大值)与数组的最后一个元素交换,缩小堆的范围,对剩下的元素继续调整成最大堆,直到排序完成。

2301_76677973的博客 2940

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【排序算法】——选择排序

排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列。所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。

2302_80243065的博客 3309

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

排序算法2-选择排序

选择排序

博客是在C++/Java/Liunx/算法的学习阶段所写的博客,内容可能不是很全面 1023

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

[算法沉淀记录] 排序算法 —— 选择排序

在本文档中,我们学习了如何使用选择排序算法对数组进行排序。我们首先定义了一个选择排序函数,然后使用该函数对不同类型的数组进行排序。最后,我们展示了排序后的数组。希望这个文档对你有所帮助!

莫寒技术人生 1440

选择排序算法流程图_十大经典排序算法——选择排序

目录 1.1、排序分类 1.2、排序的定义 1.3、术语说明 1.4、算法总结 1.5、图片名词解释 1.6、比较类排序与非比较类排序的区别 2.选择排序(Select Sort) 2.1、说明 2.2、算法描述 2.3、普通类代码 2.4、推导过程 2.5、以多态、泛型编程和STL实现选择排序 2.6、总结 c++ java1.十大经典排序算法总结1.1、排序分类1.2...

weixin_39609718的博客 3067

【小算法】选择排序

选择排序是一种非常容易理解的算法。 算法思路 假设有下面一组数据,需要从小到大升序排列。 选择排序的算法是 1. 创建一个列表或者数组 2. 第一次遍历数组,找出最小的一个数存放在新的数组中。 3. 第二次遍历数组,找出次小的数存放在新的数组。 4. 重复类似操作,直到所有的数据排列完成 图例示意: Python 代码演示: def sort(srcArr): dstArr = ...

frank 的专栏 1775

排序算法(2)选择排序(Selection Sort)

选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 2.1 算法描述 n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。具体算法描述如下: 初始状态:无序区为R[1…n],有序区为空...

cowbin2012的专栏 1万+

【算法】————2、选择排序

算法简介 选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 算法描述和实现 n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。具体算法描述如下: <1>.初始状态...

Fly_鹏程万里 416
上一篇: 算法学习笔记(1)-冒泡排序
下一篇: Java基础(0)-BIO和NIO
BoringRong
BoringRong 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 2万+粉丝 386原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoringRong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值