简单选择排序算法

简单选择排序思想:首先,找到数组中最小的元素,其次,将它和数组第一个元素交换位置;再次,在剩下的元素中找到最小的元素,将它与数组中的第二个元素交换。如此亡故,直到将整个数组排序。

这种方法叫做选择排序,因为它在不断地选择剩余元素之中的最小者。

先说看每步的状态变化,后边介绍细节,现有无序数组[6 2 4 1 5 9]

第一趟找到最小数1,放到最前边(与首位数字交换)

交换前:| 6 | 2 | 4 | 1 | 5 | 9 |

交换后:| 1 | 2 | 4 | 6 | 5 | 9 |

第二趟找到余下数字[2 4 6 5 9]里的最小数2,与当前数组的首位数字进行交换,实际没有交换,本来就在首位

交换前:| 1 | 2 | 4 | 6 | 5 | 9 |

交换后:| 1 | 2 | 4 | 6 | 5 | 9 |

第三趟继续找到剩余[4 6 5 9]数字里的最小数4,实际没有交换,4待首位置无须交换

第四趟从剩余的[6 5 9]里找到最小数5,与首位数字6交换位置

交换前:| 1 | 2 | 4 | 6 | 5 | 9 |

交换后:| 1 | 2 | 4 | 5 | 6 | 9 |

第五趟从剩余的[6 9]里找到最小数6,发现它待在正确的位置,没有交换

排序完毕输出正确结果[1 2 4 5 6 9]

第一趟找到最小数1的细节

当前数组是| 6 | 2 | 4 | 1 | 5 | 9 |


先把6取出来,让它扮演最小数

当前最小数6与其它数一一进行比较,发现更小数就交换角色

当前最小数6与2比较,发现更小数,交换角色,此时最小数是2,接下来2与剩余数字比较

当前最小数2与4比较,不动

当前最小数2与1比较,发现更小数,交换角色,此时最小数是1,接下来1与剩余数字比较

当前最小数1与5比较,不动

当前最小数1与9比较,不动,到达末尾

当前最小数1与当前首位数字进行位置交换,如下所示

交换前:| 6 | 2 | 4 | 1 | 5 | 9 |

交换后:| 1 | 2 | 4 | 6 | 5 | 9 |

完成一趟排序,其余步骤类似


选择排序有两个明显的特点:

1.运行时间跟输入无关。

为了找出最小元素而扫描一遍数组并不能为下一次扫描提供任何信息。

2.数据移动是最少的。

每次交换都会改变两个数组元素的值。


代码实现(仅供参考):

public class SelectionSort {public int[] selectSort(int[] A, int n) {for (int i = 0; i < n; i++) {int minIndex = i;//最小元素的索引int min = A[i];//最小元素for (int j = i; j < n; j++) {if (A[j] < min) {min = A[j];minIndex = j;}}if (minIndex != i) {int temp = A[i];A[i] = A[minIndex];A[minIndex] = temp;}}return A;}public static void main(String args[]) {int A[] = { 2, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 };int n = A.length;SelectionSort selectionSort = new SelectionSort();double start = System.currentTimeMillis();int B[] = selectionSort.selectSort(A, n);for (int i = 0; i < n; i++)System.out.print(B[i] + ",");double end = System.currentTimeMillis();System.out.println("\n程序运行时间:" + (end - start) + "毫秒");}
}


输出:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,
程序运行时间:2.0毫秒

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

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

相关文章

java开发工程师工作内容怎么写

什么是分布式锁&#xff1f;在回答这个问题之前&#xff0c;我们先回答一下什么是锁。 普通的锁&#xff0c;即在单机多线程环境下&#xff0c;当多个线程需要访问同一个变量或代码片段时&#xff0c;被访问的变量或代码片段叫做临界区域&#xff0c;我们需要控制线程一个一个…

community 计算模块度_光模块深度:国内光模块企业快速崛起

一、核心观点二、发展追溯:技术是底蕴、创新是动力1 光通信发展:技术迭代加快&#xff0c;国产替代是前进的方向依据摩尔定律&#xff0c;光模块的小型化、低成本以及高速率是产品迭代的主要方向。2 竞争格局:市场集中度高&#xff0c;巨头地位稳固&#xff0c;国内厂商稳步崛起…

java开发工程师的自我评价

前言 京东到家订单中心系统业务中&#xff0c;无论是外部商家的订单生产&#xff0c;或是内部上下游系统的依赖&#xff0c;订单查询的调用量都非常大&#xff0c;造成了订单数据读多写少的情况。 我们把订单数据存储在MySQL中&#xff0c;但显然只通过DB来支撑大量的查询是不…

华为魔术手机拆机图解_华为P9进水不显示维修案例

看点&#xff1a;iPhone X原装屏与国产屏有哪些区别&#xff1f;看点&#xff1a;换7P、8P屏幕&#xff1a;C11和DTP和DKH的区别狮淘&#xff1a;华人手机维修师专属工具集合店&#xff0c;不锈钢拆机片5个只需9.9元&#xff01;包邮山猫潮品&#xff1a;手机渠道直供&#xff…

java开发工程师自我介绍文本

前言 每年金三银四&#xff0c;金九银十之际&#xff0c;想进阶梦想挑战大厂的朋友层出不穷。 梦想是要有的&#xff0c;万一就实现了呢&#xff1f;且撇开大牛们不说&#xff0c;每年面试之时问题也层出不穷&#xff0c;不得不说&#xff0c;每年被算法绝杀的朋友也是不在少数…

面向对象技术

面向对象和面向过程的区别 出发点不同。 面向对象强调问题域的要领直接映射到对象和对象之间的接口上&#xff0c;是用符合常规思维的方式来处理客观世界的问题。 面向过程方法强调的则是过程的抽象化和模块化&#xff0c;是以过程为中心构造或处理客观世界问题的。层次逻辑…

ad09只在一定范围内查找相似对象_23、面向对象编程

目录&#xff1a;对象的概念类与对象面向对象编程类的定义与实例化属性访问类属性与对象属性属性查找顺序与绑定方法小结视频链接一 对象的概念”面向对象“的核心是“对象”二字&#xff0c;而对象的精髓在于“整合“&#xff0c;什么意思&#xff1f;所有的程序都是由”数据”…

java开发工程师转行可以做什么

前言 分布式事务主要解决分布式一致性的问题。说到底就是数据的分布式操作导致仅依靠本地事务无法保证原子性。与单机版的事务不同的是&#xff0c;单机是把多个命令打包成一个统一处理&#xff0c;分布式事务是将多个机器上执行的命令打包成一个命令统一处理。 MySQL 提供了…

atlas怎么看日志_亿级的日志治理!微服务最佳方案,ELK stack从零搭建

ELK Stack 诞生背景一般我们需要进行日志分析场景&#xff1a;直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中&#xff0c;此方法效率低下&#xff0c;面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理…

Java变量类型

所有的变量在使用前必须声明。 type identifier [ value][, identifier [ value] ...] ; 格式说明&#xff1a;type是数据类型&#xff0c;identifier是变量名&#xff0c;可以使用逗号隔开来声明多个同类型变量。 一下列出一些变量的声明实例&#xff0c;有些包含了初始化过…

java开发工程师面试问题大全及答案大全

前言 Alibaba作为国内互联网行业的“老大”&#xff0c;一直以来也是很多“数码宝贝”梦寐以求的公司&#xff0c;我个人是做Java开发的&#xff0c;阿里这些年也开发了很多屌炸天的开源项目&#xff0c;像什么Spring Cloud Alibaba&#xff0c;开源Java诊断工具Arthas&#x…

me shy是什么歌 抖音make_内含活动福利 | 小红书、抖音爆赞的高颜值的北欧家居神店开到卜蜂中心啦!...

几个月前&#xff0c;一家北欧范颜值爆表的瑞典独立设计师品牌家居店凭借其充满设计感的产品刷爆社交媒体微博、小红书、抖音经常出现它的身影随便一篇阅读量、收藏量都好几万数不清的爆like让人按耐不住了&#xff01;这个品牌叫NǑME家居(认住这个正版的Ǒ)&#xff0c;开到哪…

java开发工程师面试题及答案

前言 作为一名编程人员&#xff0c;对MySQL一定不会陌生&#xff0c;尤其是互联网行业&#xff0c;对MySQL的使用是比较多的。对于求职者来说&#xff0c;MySQL又是面试中一定会问到的重点&#xff0c;很多人拥有大厂梦&#xff0c;却因为MySQL败下阵来。实际上&#xff0c;My…

吕玉琴考研指导电子版_【干货大放送】中国历代文学作品选阅读指导PDF

跟紧我&#xff0c;来年轻松收获录取通知书~长按一战成硕hello&#xff0c;我是小致带你考研上路今天给大家分享的干货内容是《历代文学作品选》阅读指导之前1000题浓缩资料&#xff0c;后台回复【浓缩】获取不要再留邮箱了&#xff0c;直接后台获取本次资料由致远文学考研原创…

java开发工程师面试题总结

一、背景 我们日常在电商网站购物时经常会遇到一些高并发的场景&#xff0c;例如电商 App 上经常出现的秒杀活动、限量优惠券抢购&#xff0c;还有我们去哪儿网的火车票抢票系统等&#xff0c;这些场景有一个共同特点就是访问量激增&#xff0c;虽然在系统设计时会通过限流、异…

Java重写和重载

重写&#xff08;Override&#xff09; 重写是子类重写父类的方法&#xff0c;如果重写了父类的方法&#xff0c;访问时父类的方法就会被覆盖&#xff0c;如果想要再访问父类的同名方法&#xff0c;要用super关键字。重写的好处在于子类可以根据自己的需要&#xff0c;定义特定…

7天拿到阿里Android岗位offer,都是精髓!

食用指南 和大部分人一样&#xff0c;我在复习完第一遍Android知识的情况下&#xff0c;看到相关的知识回答的仍然不能够令自己满意。 在第二遍系统复习的时候&#xff0c;我着重记住每个知识点的关键字&#xff0c;根据这些关键字拼凑出大概的知识点&#xff0c;最后看到每个…

kafka 重新分配节点_Kafka控制器-分区重分配

分区重分配指的是将分区的副本重新分配到不同的代理节点上。如果ZK节点中分区的副本的新副本集合和当前分区副本集合相同&#xff0c;这个分区就不需要重新分配了。分区重分配是通过监听ZK的 /admin/reassign_partitions 节点触发的&#xff0c;Kafka也提供了相应的脚本工具进行…

7天拿到阿里安卓岗位offer,统统给你解决!

开头 技术的发展产生了程序员这个职位&#xff0c;从这些年各大互联网公司曝光的一些员工收入水平来看&#xff0c;程序员的工资还是相对比较高的&#xff0c;可是我们在互联网上还听到了另外一种声音&#xff0c;很多程序员想转行&#xff0c;特别是大龄程序员&#xff0c;这…

python mysqldb 查询不到最新记录_python – MySQLdb是否缓存SELECT结果?

我正在循环中运行SELECT查询.偶尔,数据库表会更新(由另一个程序).第一个SELECT检索正确的数据,但循环中的其他调用返回第一个值.如何检索最新数据&#xff1f;到目前为止我找到的唯一解决方法是在每次迭代时重新连接到数据库&#xff01;在我的例子中,取消注释#1#和#2#的注释.仅…