当前位置: 首页 > news >正文

排序基础之选择排序法

目录

前言

一、什么是选择排序

二、实现选择排序

三、使用泛型扩展

四、使用自定义类型测试


前言

今天天气不错,这么好的天气不干点啥实在是有点可惜了,于是乎,拿出键盘撸一把!

来,今天来学习一下排序算法中的选择排序法。

一、什么是选择排序

简单来说就是:

先把最小的拿出来

剩下的,再把最小的拿出来

剩下的,再把最小的拿出来

。。。。。。依次类推,每次都是选择还没处理的元素中最小的元素。

比如下图所示,一个乱序的数组经过排序后得到了一个有序的数组:

实现思想:双层循环,外层i从下标0开始遍历,内层j从下标为i的位置开始遍历,遍历得到最小的元素之后, 与下标为i的元素进行交换,之后i加1,重新开始上述步骤。

二、实现选择排序

下面我们通过代码来实现上面的这个乱序的整型数组的排序:

public class SelectionSort {public static void main(String[] args) {int[] arr = {6, 4, 2, 3, 1, 5};SelectionSort.sort(arr);for (int ele : arr) {System.out.print(ele + " ");}System.out.println();}private SelectionSort() {}public static void sort(int[] arr) {for (int i = 0; i < arr.length; i++) {// 选择arr[i...n)中最小值的索引int minIndex = i;for (int j = i; j < arr.length; j++) {if (arr[j] < arr[minIndex]) {minIndex = j;}}swap(arr, i, minIndex);}}private static void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}
}

运行结果如下:

三、使用泛型扩展

下面将排序方法扩展成为泛型方法,并且为泛型添加Comparable约束,在测试方法main()中,我们不能使用基本数据类型int了,而是需要使用装箱类Integer,代码如下:

public class SelectionSort {public static void main(String[] args) {Integer[] arr = {6, 4, 2, 3, 1, 5};SelectionSort.sort(arr);for (int ele : arr) {System.out.print(ele + " ");}System.out.println();}private SelectionSort() {}public static <T extends Comparable<T>> void sort(T[] arr) {for (int i = 0; i < arr.length; i++) {// 选择arr[i...n)中最小值的索引int minIndex = i;for (int j = i; j < arr.length; j++) {if (arr[j].compareTo(arr[minIndex]) < 0) {minIndex = j;}}swap(arr, i, minIndex);}}private static <T> void swap(T[] arr, int i, int j) {T temp = arr[i];arr[i] = arr[j];arr[j] = temp;}
}

运行完了,同样好使的哈:

 

四、使用自定义类型测试

首先,跟上一篇中《最简单的算法:线性查找法》一样,我们来整个Student类,该类实现Comparable接口,重写compareTo(),如下所示:

public class Student implements Comparable<Student> {private String name;private int score;public Student(String name, int score) {this.name = name;this.score = score;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (this.getClass() != obj.getClass())return false;Student stu = (Student) obj;return this.name.equals(stu.name);}@Overridepublic int compareTo(Student stu) {return this.score - stu.score;}@Overridepublic String toString() {return String.format("Student(name:%s,score:%d)", name, score);}
}

然后,在main()中进行测试:

 

得到结果如下:

OK,以上主要介绍了如何实现一个通用数据类型的选择排序算法,如何一步一步的优化,今天的内容就这么多了,下期再会!

相关文章:

排序基础之选择排序法

目录 前言 一、什么是选择排序 二、实现选择排序 三、使用泛型扩展 四、使用自定义类型测试 前言 今天天气不错&#xff0c;这么好的天气不干点啥实在是有点可惜了&#xff0c;于是乎&#xff0c;拿出键盘撸一把&#xff01; 来&#xff0c;今天来学习一下排序算法中的选…...

2.24测试用例

一.测试模型1.V模型特点:1.明确标注了测试的类型2.明确标注了测试阶段和开发阶段的对应关系缺点:测试后置2.W模型也叫双v模型,测试阶段全流程介入缺点:1.上一阶段完成.下一个阶段才能开始2.开发模型和测试模型也保持着一种线性的前后关系3.重文档,重过程,不支持敏捷模式二.设计…...

面试必刷101 Java题解 -- part 1

练习地址 面试必刷101-牛客1、链表反转2、链表内指定区间反转**3. 链表中的节点每k个一组翻转**4、**合并两个排序的链表**5、**合并k个已排序的链表**6、**判断链表中是否有环****7、链表中环的入口结点**8、链表中倒数最后k个结点**9、删除链表的倒数第n个节点****10、两个链…...

Python---关联与继承

专栏&#xff1a;python 个人主页&#xff1a;HaiFan. 专栏简介&#xff1a;Python在学&#xff0c;希望能够得到各位的支持&#xff01;&#xff01;&#xff01; 关联与继承前言has a关联关系is a继承关系子类不添加__init__子类添加__init__前言 has a关联关系 has - a 是在…...

数据库行业的 “叛逆者”:大数据已“死”,MotherDuck 当立

“大数据”已死——现今我们最重要的事情不是担心数据大小&#xff0c;而是专注于我们将如何使用它来做出更好的决策。数据库行业发展至今&#xff0c;在数据层面有很多的加速和变革&#xff0c;尤其是过去几年的云数仓爆炸式增长&#xff0c;带来了行业的很多变化。毫无疑问&a…...

Linux->进程优先级

目录 1. 优先级的概念 2. 优先级的运作方式 3. Linux下查看进程优先级以及调整 3.1 查看进程优先级 3.2 修改进程优先级 1. 优先级的概念 1. cpu资源分配的先后顺序&#xff0c;就是指进程的优先权&#xff08;priority&#xff09;。 2. 优先权高的进程有优先执行权利。配…...

loki 日志管理的安装部署使用

loki介绍 Loki是 Grafana Labs 团队最新的开源项目&#xff0c;是一个水平可扩展&#xff0c;高可用性&#xff0c;多租户的日志聚合系统。它的设计非常经济高效且易于操作&#xff0c;因为它不会为日志内容编制索引&#xff0c;而是为每个日志流编制一组标签。 不对日志进行…...

CTFer成长之路之反序列化漏洞

反序列化漏洞CTF 1.访问url&#xff1a; http://91a5ef16-ff14-4e0d-a687-32bdb4f61ecf.node3.buuoj.cn/ 点击下载源码 本地搭建环境并访问url&#xff1a; http://127.0.0.1/www/public/ 构造payload&#xff1a; ?sindex/index/hello&ethanwhoamiPOST的参数&#…...

Python学习-----模块5.0(文件管理大师-->os模块)

目录 前言&#xff1a; 1.os.getcwd() 2. os.listdir(path) 3.os.walk(path) 4.os.path.exists(path) 5.os.mkdir(path) 6.os.makedirs(path,exist_okTrue) 7.os.rmdir(path) 8.os.remove(path) 9.os.path.join(p1,p2) 10.os.path.split(path) 11.os.path.isdi…...

第45届世界技能大赛“网络安全”赛项浙江省选拔赛竞赛任务书

第45届世界技能大赛浙江省选拔赛竞赛任务书 一、竞赛时间 8:00-17:00&#xff0c;共计9小时。 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 模块A 任务1 数据库安全加固 8:00-10:00 50 任务2 文件MD5校验 50 任务3 Linux系统服务渗透测试及安全加…...

【uniapp微信小程序】跨平台使用echarts的方案选择踩坑

一、前言 使用Uniapp&#xff08;vue&#xff09;开发微信小程序&#xff0c;想用echarts图表实现类似github热力图的效果。 简要列一些可行或不可行的方案。 二、方案对比 1. 【应用】&#xff1a;微信小程序原生开发 有echarts官网提供的跨平台方案&#xff1a;在微信小程…...

WAF渗透攻防实践(16)

预备知识 WAF&#xff1a;WEB攻击一直是黑客攻击的主流手段&#xff0c;WAF作为网站安全基础设施的标配。Web Application Firewall&#xff0c;Web应用防火墙&#xff0c;通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的产品。 Nginx&#xff1a;Nginx 是…...

高并发场景下机器性能优化sop

之前接触过一些高并发场景下的性能优化&#xff0c;最近过年时候又碰巧看了一些相关资料&#xff0c;趁着还没忘干净&#xff0c;手动整理一下&#xff0c;有一些是在别处看到的&#xff0c;有一些是自己的亲身经历&#xff0c;因为偏向于自己整理笔记所以很多地方都只是列了一…...

【女程序员进大厂面试经验】

*那些犹豫想做技术又不敢的女生一定不要胆怯&#xff0c;就认准了这条路坚持走下去。大三的学生已经可以开始投简历、寻找面试机会了。先说一下我的情况吧&#xff01;我是郑州一双普通本科的女大学生&#xff0c;刚找工作的时候也很迷茫。同班的女生有做产品的、有做前端的、还…...

计算机网络笔记(复试准备)第一章

计算机网络笔记&#xff08;复试准备&#xff09; 第一章 网络&#xff0c;互联网与因特网 网络由若干个结点和连接这些结点的链路组成 多个网络通过路由器连接起来这也就形成了一个更大的网络即是我们熟知的互联网也就是“网络的网络” 因特网是世界上最大的网络 问&#xf…...

WooCommerce 上传文件 Vanquish v71.6

今天用wp 搭一个b2c外贸跨境电商网站 找 了一个文件上传插件&#xff0c;可以 上传无限数量的文件&#xff0c;没有文件大小限制WooCommerce 上传文件允许您上传无限数量的文件&#xff0c;没有任何文件大小限制。得益于其创新的块上传技术&#xff0c;它可以不受限制地上传任何…...

zabbix4.0 Web页面配置 - 聚合图形的实现

目录 1、主机组Host groups配置 创建主机组 ​编辑 将一个主机添加至刚才创建的主机里面 2、用户参数UserParameter设置 示例&#xff1a; 添加一个参数&#xff1a;show.host.messages 模拟zabbix模板里面的参数再添加一个userparameter 3、触发器设置 示例&#xff1a; …...

计算机网络 — UDP协议(看这一篇就可以

UDP协议UDP是传输层的重要协议之一&#xff0c;另一重要协议为TCP协议。两者对比&#xff1a;TCP协议复杂&#xff0c;但传输可靠。UDP协议简单&#xff0c;但传输不可靠。UDP协议全称为&#xff1a;User Datagram Protocol&#xff08;用户数据报协议&#xff09;。它是一个简…...

Pikachu靶场(暴力破解)

目录标题暴力破解&#xff08;登录&#xff09;基于表单的暴力破解验证码绕过(on server)验证码绕过(on client)token防爆破?上学期用这个靶场写过作业&#xff0c;现在抽空给它过一遍&#xff0c;由于需要抓包&#xff0c;从而通过小皮&#xff0c;使用本地&#xff08;127.0…...

浅谈script,link,import,@import引入

一.页面导入样式&#xff0c;使用link和import有什么区别 链接式和导入式有什么区别&#xff08;链接式&#xff0c;导入式&#xff0c;内嵌式&#xff0c;行内&#xff09; 1.从属关系:link是html标签&#xff0c;import是css提供的. 2.加载差异:页面加载时&#xff0c;link会…...

龙虾agent-browser获得chromium包问题

小龙虾非常火爆&#xff0c;在装agent-browser的时候&#xff0c;普通人往往被chromium的安装堵死了。网上的跨域安装方法一大堆&#xff0c;包括用镜像站点&#xff0c;国内所有的镜像站点都不行。但是真正能走通的&#xff0c;我到最后也没有试出来。最后只能自己想出一种手动…...

GyroFlow:用陀螺仪数据重塑视频稳定技术

GyroFlow&#xff1a;用陀螺仪数据重塑视频稳定技术 【免费下载链接】gyroflow Video stabilization using gyroscope data 项目地址: https://gitcode.com/GitHub_Trending/gy/gyroflow 在数字影像创作领域&#xff0c;画面稳定性直接决定作品专业度。无论是运动相机拍…...

Qwen3.5-2B部署实操:CentOS 7兼容性处理与依赖库降级方案

Qwen3.5-2B部署实操&#xff1a;CentOS 7兼容性处理与依赖库降级方案 1. 模型简介 Qwen3.5-2B是阿里云推出的轻量化多模态基础模型&#xff0c;属于Qwen3.5系列的小参数版本&#xff08;20亿参数&#xff09;。该模型主打低功耗、低门槛部署特性&#xff0c;特别适配端侧和边…...

MULTISIM仿真揭秘:如何设计高可靠性的光耦隔离PMOS驱动电路

1. 光耦隔离PMOS驱动电路的设计挑战 在工业控制和高压隔离场景中&#xff0c;PMOS驱动电路的设计往往面临诸多挑战。我曾在多个项目中遇到过MOS管因静电击穿而损坏的情况&#xff0c;也经历过因开关频率不足导致系统性能下降的尴尬。这些问题归根结底都与MOS管的特性有关。 MOS…...

5个核心功能让网盘用户彻底解决下载速度慢的问题

5个核心功能让网盘用户彻底解决下载速度慢的问题 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅雷云盘 …...

Leather Dress Collection 企业级参数调优指南:平衡响应速度与生成质量

Leather Dress Collection 企业级参数调优指南&#xff1a;平衡响应速度与生成质量 如果你正在考虑把Leather Dress Collection这类大模型服务搬到公司的生产环境里&#xff0c;那你肯定遇到过这样的纠结&#xff1a;调快了&#xff0c;生成的内容质量好像会打折扣&#xff1b…...

CSS动画+超级千问:打造有呼吸感的语音合成反馈系统(实战教程)

CSS动画超级千问&#xff1a;打造有呼吸感的语音合成反馈系统&#xff08;实战教程&#xff09; 1. 项目介绍与核心价值 1.1 传统TTS工具的痛点 大多数语音合成工具的操作体验是这样的&#xff1a;面对一堆参数滑块&#xff0c;反复调整"语速"、"音高"、…...

Discord社群运营神器:用AI自动回复提升活跃度的完整指南

Discord社群运营神器&#xff1a;用AI自动回复提升活跃度的完整指南 在数字社交时代&#xff0c;Discord已经从一个游戏语音工具成长为全球最受欢迎的社群平台之一。无论是Web3项目、开源社区还是兴趣小组&#xff0c;Discord都成为了连接成员的核心枢纽。但作为社群运营者&…...

英雄联盟自动化助手:提升游戏效率的全方位解决方案

英雄联盟自动化助手&#xff1a;提升游戏效率的全方位解决方案 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League Akari作为一…...

提升开发效率:Android Studio零障碍IDE本地化配置指南

提升开发效率&#xff1a;Android Studio零障碍IDE本地化配置指南 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本&#xff09; 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 开发人员在使用…...