选择排序以及改进方案

选择排序以及改进方案

介绍:

选择排序是一种简单直观的排序算法,它的基本思想是在未排序序列中选择最小(或最大)的元素,然后将其放在已排序序列的末尾。选择排序的过程就像是每次从待排序的元素中选择最小的一个,依次放到已排序序列的末尾,直到整个序列有序。

图示:

gif01

选择排序性能

算法最好时间最坏时间平均时间额外空间稳定性
选择O(n2)O(n2)O(n2)1不稳定

普通版本的选择排序

通过简单的两层遍历,就可以实现了:

for (int i = 0; i < array.length - 1; i++) {int minIndex = i; // 假设当前位置的元素是最小的for (int j = i + 1; j < array.length; j++) {if (array[j] < array[minIndex]) {minIndex = j; // 在未排序的部分中找到最小元素的索引}}// 将找到的最小元素与当前位置交换int temp = array[i];array[i] = array[minIndex];array[minIndex] = temp;
}

改进:

在每次遍历中,不仅找到未排序部分的最小元素,还找到未排序部分的最大元素,然后分别将最小元素放在已排序部分的开头,将最大元素放在已排序部分的末尾。这样每次遍历可以减少一半的交换次数。

public class SelectionSort {public static void improvedSelectionSort(int[] array) {for (int i = 0; i < array.length / 2; i++) {int minIndex = i; // 假设当前位置的元素是最小的int maxIndex = i; // 假设当前位置的元素是最大的for (int j = i + 1; j < array.length - i; j++) {if (array[j] < array[minIndex]) {minIndex = j; // 在未排序的部分中找到最小元素的索引} else if (array[j] > array[maxIndex]) {maxIndex = j; // 在未排序的部分中找到最大元素的索引}}// 将找到的最小元素与当前位置交换int tempMin = array[i];array[i] = array[minIndex];array[minIndex] = tempMin;// 将找到的最大元素与当前位置交换int tempMax = array[array.length - i - 1];array[array.length - i - 1] = array[maxIndex];array[maxIndex] = tempMax;}}public static void main(String[] args) {int[] arr = { 64, 34, 25, 12, 22, 11, 90 };System.out.println("原始数组:");printArray(arr);improvedSelectionSort(arr);System.out.println("排序后的数组:");printArray(arr);}// 辅助方法,用于打印数组public static void printArray(int[] array) {for (int i : array) {System.out.print(i + " ");}System.out.println();}
}

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

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

相关文章

2024年天津艺术职业学院专升本报名工作的通知

天津艺术职业学院关于2024年天津市高职升本科考试报名工作的通知 请天津艺术职业学院各位2024届大专应届毕业生&#xff08;含高职扩招2024年应届毕业生&#xff09;查阅以下通知。 一、网上报名 &#xff08;一&#xff09;时间及网址&#xff1a;请于2023年12月4日9:00至6日…

【Vue】绝了!这生命周期流程真...

hello&#xff0c;我是小索奇&#xff0c;精心制作的Vue系列持续发放&#xff0c;涵盖大量的经验和示例&#xff0c;如果对您有用&#xff0c;可以点赞收藏哈~ 生命周期 Vue.js 组件生命周期&#xff1a; 生命周期函数&#xff08;钩子&#xff09;就是给我们提供了一些特定的…

Net6.0或Net7.0项目升级到Net8.0 并 消除.Net8中SqlSugar的警告

本文基于NetCore3.1或Net6.0项目升级到Net7.0&#xff0c;参考连接&#xff1a;NetCore3.1或Net6.0项目升级到Net7.0-CSDN博客 所有项目按照此步骤操作一遍&#xff0c;完成后再将所有引用的包&#xff08;即 *.dll&#xff09;更新升级到最新版&#xff08;注意&#xff1a;有…

Spark---资源、任务调度

一、Spark资源调度源码 1、Spark资源调度源码过程 Spark资源调度源码是在Driver启动之后注册Application完成后开始的。Spark资源调度主要就是Spark集群如何给当前提交的Spark application在Worker资源节点上划分资源。Spark资源调度源码在Master.scala类中的schedule()中进行…

leetCode 17.电话号码的字母组合 + 回溯算法 + 图解 + 笔记

17. 电话号码的字母组合 - 力扣&#xff08;LeetCode&#xff09; 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&…

类指针压缩空间

一、类指针压缩介绍 压缩指针&#xff0c;指的是在 64 位的机器上&#xff0c;使用 32 位的指针来访问数据&#xff08;堆中的对象或 Metaspace 中的元数据&#xff09;的一种方式。 对象头中的 Class Pointer 默认占 8 个字节&#xff0c;开启 -XX:UseCompressedOops 后&…

文本生成超逼真歌曲,谷歌推出音乐模型Lyria

转换示例 谷歌旗下的DeepMind与视频平台YT合作&#xff0c;发布了目前最先进的音乐模型——Lyria。 为了突破传统音乐模型的生硬机器感&#xff0c;谷歌汇集了多个部门并与Charlie Puth、T-Pain、Troye Sivan等9位知名音乐人共同研发了Lyria。 Lyria可生成爵士、重金属、摇滚…

每日一题:LeetCode-202.面试题 08.06. 汉诺塔问题

每日一题系列&#xff08;day 07&#xff09; 前言&#xff1a; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f50e…

在centos7上源码安装nginx

1. 安装必要的编译工具和依赖项 在编译Nginx之前&#xff0c;你需要安装一些编译工具和依赖项。可以通过以下命令安装&#xff1a; yum install gcc-c pcre-devel zlib-devel make 2. 下载Nginx源代码 从Nginx官网下载最新的源代码。你可以使用wget命令来下载&#xff1a; …

正则表达式及文本三剑客grep,awk,sed

目录 正则表达式 前瞻 代表字符 表示次数 位置锚定 分组或其他 grep 选项 范例 awk 前瞻 awk常见的内置变量 范例 sed 前瞻 sed格式 范例 搜索替代 格式 范例 分组后项引用 格式 范例 正则表达式 前瞻 通配符&#xff1a;匹配的是文件名 正则表达式&a…

【读论文】【泛读】S-NERF: NEURAL RADIANCE FIELDS FOR STREET VIEWS

文章目录 0. Abstract1. Introduction2. Related work3. Methods-NERF FOR STREET VIEWS3.1 CAMERA POSE PROCESSING3.2 REPRESENTATION OF STREET SCENES3.3 DEPTH SUPERVISION3.4 Loss function 4. EXPERIMENTS5. ConclusionReference 0. Abstract Problem introduction&…

REST-Assured--JAVA REST服务自动化测试的Swiss Army Knife

什么是REST-Assured REST Assured是一套基于 Java 语言实现的开源 REST API 测试框架 Testing and validation of REST services in Java is harder than in dynamic languages such as Ruby and Groovy. REST Assured brings the simplicity of using these languages into t…