选择排序算法

        选择排序(Selection Sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

        选择排序的基本思想是:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

        选择排序的时间复杂度为O(n^2),其中n为待排序元素的个数。虽然时间复杂度较高,但选择排序是稳定的排序算法,且具有较好的性能表现。

实现思想:

        首先,定义一个最小值min,将min赋值循环后的第一个未排序的值,将该值与后续的值进行比较,如果发现有比min还有小的值,将两个元素进行交换。如果没有发现比该元素还要小的值,说明该值不需要改动,当前位置就是其排序后的位置。依次循环,比较 (元素-1) 次即可完成排序。

推敲代码中: 
public class Sortselect {public static void main(String[] args) {int[] arrays = {12, 5, 8, 9, 4, 2};System.out.println("排序前:" + Arrays.toString(arrays));int min = arrays[0];for (int j = 0; j < arrays.length; j++) {if (min > arrays[j]) {//交换元素,将最小值移到相应的位置min = arrays[j];arrays[j] = arrays[0];arrays[0] = min;}}System.out.println("第一轮:" + Arrays.toString(arrays));min = arrays[1];for (int j = 1; j < arrays.length; j++) {if (min > arrays[j]) {//交换元素,将最小值移到相应的位置min = arrays[j];arrays[j] = arrays[1];arrays[1] = min;}}System.out.println("第二轮:" + Arrays.toString(arrays));min = arrays[2];for (int j = 2; j < arrays.length; j++) {if (min > arrays[j]) {//交换元素,将最小值移到相应的位置min = arrays[j];arrays[j] = arrays[2];arrays[2] = min;}}System.out.println("第三轮:" + Arrays.toString(arrays));min = arrays[3];for (int j = 3; j < arrays.length; j++) {if(min > arrays[j]){min = arrays[j];arrays[j] = arrays[3];arrays[3] = min;}}System.out.println("第四轮:" + Arrays.toString(arrays));min = arrays[4];for (int j = 4; j < arrays.length; j++) {if(min > arrays[j]){min = arrays[j];arrays[j] = arrays[4];arrays[4] = min;}}System.out.println("第五轮:" + Arrays.toString(arrays));min = arrays[5];for (int j = 5; j < arrays.length; j++) {if(min > arrays[j]){min = arrays[j];arrays[j] = arrays[5];arrays[5] = min;}}System.out.println("第五轮:" + Arrays.toString(arrays));}
}

找到规律后,实现简化:
public class SelectSort {public static void main(String[] args) {int[] arrays = {12, 5, 8, 9, 4, 2};System.out.println("排序前:" + Arrays.toString(arrays));int min = arrays[0];for (int i = 0; i < arrays.length - 1; i++) {min = arrays[i];for (int j = i; j < arrays.length; j++) {if (min > arrays[j]) {//交换元素,将最小值移到相应的位置min = arrays[j];arrays[j] = arrays[i];arrays[i] = min;}}System.out.println("排序中:" + Arrays.toString(arrays)); //为了看清交换顺序}System.out.println("排序后:" + Arrays.toString(arrays));}
}

使用下标控制进行交换(实现):
public class SelectSort2 {public static void main(String[] args) {//选择排序的时间复杂度是O(n^2)int[] arrays = {12, 5, 8, 9, 4, 2};System.out.println("排序前:" + Arrays.toString(arrays));for (int i = 0; i < arrays.length - 1; i++) {int minIndex = i;int min = arrays[i];for (int j = i + 1; j < arrays.length; j++) {if (min > arrays[j]) { //说明假定的最小值不是最小的那一个min = arrays[j]; //重置minminIndex = j; //重置minIndex}}//将最小值,放在array[i],即交换if (minIndex != i) {arrays[minIndex] = arrays[i];arrays[i] = min;}System.out.println("第" + (i + 1) + "轮:" + Arrays.toString(arrays));}System.out.println("排序前:" + Arrays.toString(arrays));}
}
 

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

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

相关文章

PC+Wap仿土巴兔装修报价器源码 PHP源码

核心功能&#xff1a; 业主自助预算计算&#xff1a;通过简洁的界面&#xff0c;业主可以输入装修需求&#xff0c;系统自动进行预算计算信息自动收集&#xff1a;系统自动收集业主的基本信息&#xff0c;如姓名、联系方式、房屋面积等一键发送报价&#xff1a;业主完成预算计…

【mysql】报错1349 - View‘s SELECT contains a subquery in the FROM clause

操作 创建视图的sql语句中有不支持子查询 mysql创建视图 select * from (select name,age from table_name where 11 and namea ) tb where 11 and type1问题 报错1349 - View’s SELECT contains a subquery in the FROM clause 原因 原因创建视图的sql语句中有不支持子查…

WEB前端知识点整理(JQUERY+Bootstrap+ECharts)

1.JQUERY的概述&#xff1a; jQuery 是一个 JavaScript 库。jQuery 极大地简化了JavaScript 编程&#xff0c;它很容易学习。 jQuery库包含以下功能&#xff1a;HTML 元素选取&#xff1b;HTML 元素操作&#xff1b;CSS 操作&#xff1b;HTML 事件函数&#xff1b;JavaScript …

Nginx - 使用error_page实现带有图片的自定义错误页面

文章目录 概述官网文档需求实现 概述 在Nginx中&#xff0c;您可以使用error_page指令来指定当请求遇到特定错误时应当显示的自定义错误页面。为了实现带有图片的自定义错误页面&#xff0c;可以按照以下步骤操作&#xff1a; 创建错误页面&#xff1a; 首先&#xff0c;需要…

如何选择最适合的采购付款 (P2P) 解决方案?

无论企业的业务流程执行得如何&#xff0c;流程中始终存在改进空间。更好的管理系统是获得更好结果的关键&#xff0c;尤其是当企业处于增长阶段时。强大的采购到付款&#xff08;P2P&#xff09;系统是加快采购流程&#xff0c;同时保持采购支出可见性的最有效方法之一。 什么…

python实现给定两个列表,“求同存异”

目录 问题描述&#xff1a; 代码实现&#xff1a; 问题描述&#xff1a; 给定两个列表&#xff0c;list1和list2。 python实现求list1和list中重复的元素&#xff0c;以及在list1中&#xff0c;不在list2的元素。 代码实现&#xff1a; def common_unique(pred_list, gold_l…

【信息论与编码】习题-单选题

目录 单选题1.下列说法正确的是&#xff08;B&#xff09;2.在信息论中&#xff0c;若用对数底2为&#xff0c;则信息量的单位为&#xff08;C&#xff09;3.率失真函数的下限为&#xff08;A&#xff09;4.给定xi条件下随机事件yj所包含的不确定度和条件自信息量p(yj /xi)。&a…

启动 Mac 时显示闪烁的问号

启动 Mac 时显示闪烁的问号 如果启动时在 Mac 屏幕上看到闪烁的问号&#xff0c;这意味着你的 Mac 无法找到自身的系统软件。 如果 Mac 启动时出现闪烁的问号且无法继续启动&#xff0c;请尝试以下步骤。 1.通过按住其电源按钮几秒钟来关闭 Mac。 2.按一下电源按钮&#xf…

爬虫与反爬-localStorage指纹(某易某盾滑块指纹检测)(Hook案例)

概述&#xff1a;本文将用于了解爬虫中localStorage的检测原理以及讲述一个用于检测localStorage的反爬虫案例&#xff0c;最后对该参数进行Hook断点定位 目录&#xff1a; 一、LocalStorage 二、爬虫中localStorage的案例&#xff08;以某盾滑块为例&#xff09; 三、如何…

Linux ssh 实现远程免密登录

一、背景 我搭建了一个 zookeeper 集群&#xff0c;写了一个 shell 脚本来控制集群的启动和关闭&#xff0c;但是我发现每次我执行 shell 脚本的时候&#xff0c;都需要我输入各个服务器的密码才可以运行&#xff0c;感觉很麻烦。shell 脚本里面连接其他服务器用的就是 ssh 的方…

RocketMQ MQClientInstance、生产者实例启动源码分析

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…

JVM篇:直接内存

直接内存 直接内存并不是JVM的内存结构&#xff0c;直接内存是操作系统的内存&#xff0c;Java本身并不能对操作系统的内存进行操作&#xff0c;而是通过调用本地方法。直接内存常用于NIO作为缓冲区存在&#xff0c;分配成本较高但是读写性能好&#xff0c;并且不受JVM内存回收…

有网友希望我推荐几个创建产品手册工具,这不就来了!

上次我有说到&#xff0c;企业应该充分认识到产品手册的重要性&#xff0c;并采取有效的策略和措施来制作和传播高质量的产品手册&#xff0c;以提升品牌知名度和市场份额。后台有网友问我除了设计排版的那种产品手册工具&#xff0c;还有什么方式可以去做产品手册。今天就介绍…

Verifiable Credentials可验证证书 2023 终极指南

1. 引言 Dock公司为去中心化数字身份领域的先驱者&#xff0c;其自2017年以来&#xff0c;已知专注于构建前沿的可验证证书&#xff08;Verifiable Credentials&#xff09;技术。本文将阐述何为电子证书、电子证书工作原理、以及其对组合和个人的重要性。 伪造实物证书和数字…

​结构体数组

1. 结构体的声明 1.1 结构体的基础知识 结构是一些值的集合&#xff0c;这些值被称为成员变量。结构的每个成员可以是不同类型的变量。 1.2 结构的声明 struct tag {member - list; }variable-list; 例&#xff1a;描述一个人的信息&#xff1a;名字电话性别身高 //声明的…

05、Kafka ------ CMAK 各个功能的作用解释(主题和分区 详解,用命令行和图形界面创建主题和查看主题)

目录 CMAK 各个功能的作用解释&#xff08;主题&#xff09;★ 主题★ 分区★ 创建主题&#xff1a;★ 列出和查看主题 CMAK 各个功能的作用解释&#xff08;主题&#xff09; ★ 主题 Kafka 主题虽然也叫 topic&#xff0c;但它和 Pub-Sub 消息模型中 topic 主题及 AMQP 的 t…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)创建一个TcpConnection实例 以及 接收客户端数据

#CSDN 年度征文&#xff5c;回顾 2023&#xff0c;赢专属铭牌等定制奖品# 一、主线程反应堆模型的事件添加和处理详解 >>服务器和客户端建立连接和通信流程&#xff1a; 基于多反应堆模型的服务器结构图&#xff0c;这主要是一个TcpServer&#xff0c;关于HttpServer,…

4个原创技术文档,从Excel到MySQL到Python

2023马上就要结束了&#xff0c;回首这一年的工作和努力&#xff0c;我感到非常欣慰和自豪。在这段时间里&#xff0c;我专注于撰写原创技术文档&#xff0c;致力于为大家提供有价值的内容。 这四篇原创技术文档是我精心编写的&#xff0c;每一篇都经过了深入研究和详尽的实践…

HTML5大作业-精致版个人博客空间模板源码

文章目录 1.设计来源1.1 博客主页界面1.2 博主信息界面1.3 我的文章界面1.4 我的相册界面1.5 我的工具界面1.6 我的源码界面1.7 我的日记界面1.8 我的留言板界面1.9 联系博主界面 2.演示效果和结构及源码2.1 效果演示2.2 目录结构2.3 源代码 源码下载 作者&#xff1a;xcLeigh …

普中STM32-PZ6806L开发板(HAL库函数实现-按键扫描)

简介 实现按键扫描, 实现四个按键按下控制灯的亮灭 电路原理图 按键电路原理图 按键与主芯片引脚原理图 其他知识 原理图分析 Key_UP按下会有高电平输入, 所以电路设置应该是默认低电平, 初始化为下拉输入 Key_Left/Right/Down按下会有低电平&#xff0c; 初始化为下拉输…