算法-选择排序

选择排序实现

以下是用kotlin写的选择排序。

让我们来一行行地分析。我会先摘出代码片段,然后给出解释。

这个外层的循环代表每一轮检查。在一轮检查之初,我们会先记住目前的最小值的索引。

因此每轮开始时lowestNumberIndex都会是该轮的起点索引i。注意我们实际上记录的是最小值的索引,而非最小值本身。于是,第1轮开始时最小值的索引是0,到第2轮则是1,以此类推。

此行代码发起一个以i + 1开始的内层循环。

循环内逐个检查数组未排序的格子,若遇到比之前记录的本轮最小值还小的格子值,就将lowestNumberIndex更新为该格子的索引。

内层循环结束时,会得到未排序数值中最小值的索引。

然后再看看这个最小值是否已在正确位置,即该索引是否等于i。如果不是,就将i所指的值与最小值交换。

选择排序效率

选择排序的步骤可分为两类:比较和交换,也就是在每轮检查中把未排序的值跟该轮已遇到的最小值做比较,以及将最小值与该轮起点的值交换以使其位置正确。

在之前5个元素的例子里,我们总共进行了10次比较。每轮分别如下。

于是4 + 3 + 2 + 1=10次比较。

推广开来,若有N个元素,就会有 (N -1) + (N -2) + (N -3) + … + 1次比较。

但每轮的交换最多只有1次。如果该轮的最小值已在正确位置,就无须交换,否则要做1次交换。相比之下,冒泡排序在最坏情况(完全逆序)时,每次比较过后都要进行1次交换。

下表为冒泡排序和选择排序的并列对比。

从表中可以清晰地看到,选择排序的步数大概只有冒泡排序的一半,即选择排序比冒泡排序快一倍。

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

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

相关文章

PHP框架简介

PHP是一种广泛使用的开源脚本语言,主要用于Web开发,它可以创建动态交互式Web页面。而PHP框架则是一套用于开发Web应用程序的工具和库的集合,它可以帮助开发者更高效地编写PHP代码,提高开发速度和代码的可维护性。 理解PHP框架&am…

系统架构设计师教程 第4章 信息安全技术基础知识-4.1 信息安全基础知识-解读

系统架构设计师教程 第4章 信息安全技术基础知识-4.1 信息安全基础知识 4.1.1 信息安全的概念4.1.1.1 信息安全的范围4.1.1.1.1 设备安全4.1.1.1.2 数据安全4.1.1.1.3 内容安全4.1.1.1.4 行为安全 4.1.2 信息存储安全4.1.2.1 信息使用的安全4.1.2.1.1 用户的标识与验证4.1.2.1.…

(C++) 文件读写基础

文章目录 🗂️前言📄ref📄访问标记🗃️流打开模式类型 🗂️Code📄demo📄分点讲解🗃️打开/关闭🗃️写🗃️读🗃️状态函数 🗂️END&…

【YOLOv10[基础]】热力图可视化实践① | 支持视频热力图 | 密度热力图 | 论文必备

本文将进行添加YOLOv10版本的热力图可视化功能的实践,支持视频的热力图可视化。 目录 一 热力图可视化实践① 1 代码 2 效果图 在论文中经常可以见到提取的物体特征以热力图的形式展示出来,将特征图以热力图的方式进行可视化在深度学习中有以下的原因: ①强调激活区域 ,…

【大数据专题】数据仓库

1. 简述数据仓库架构 ? 数据仓库的核心功能从源系统抽取数据,通过清洗、转换、标准化,将数据加载到BI平台,进而满足业 务用户的数据分析和决策支持。 数据仓库架构包含三个部分:数据架构、应用程序架构、底层设施 1&…

MongoDB教程(十八):MongoDB MapReduce

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 文章目录 引言一、MapRed…

LeetCode 算法:分割回文串 c++

原题链接🔗:分割回文串 难度:中等⭐️⭐️ 题目 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。 示例 1: 输入:s “aab” 输出&#xff…

PHP银行卡实名认证接口对接、银行卡识别

在这个数字时代,每一张银行卡都承载着你的故事,它是你辛勤汗水的见证,是你生活品质的保障。就像你的身份证一样,银行卡也需要“实名认证”,这不仅仅是一次信息的匹配,更是对个人财产安全的一份承诺。 随着…

docker大全

1. 简述什么是 Docker 容器? Docker 容器 在应用程序层创建抽象并将应用程序及其所有依赖项打包在一起。这使我们能够快速可靠地部署应用程序。容器不需要我们安装不同的操作系统。相反,它们使用底层系统的 CPU 和内存来执行任务。这意味着任何容器化应…

云计算安全技术介绍

云计算安全技术介绍 安全概述物理安全基础设施安全网络安全网络安全威胁防火墙ACLIDS 入侵检测系统IPS 入侵预防系统VPNSSLSSL VPNSSHHTTPSCHAP 询问握手认证协议数字签名数据安全虚拟化安全管理安全安全概述 安全是指不因人、机、媒介的相互作用而导致系统损失、人员伤害、任…

【系列专题】新质生产力之光,照亮“制造强国”之路

随着科技的不断进步和全球化的深入发展,新质生产力已经成为推动现代社会经济发展的重要力量。在新质生产力布局中,改造提升传统产业是重要内容之一。中国制造业总体规模连续14年保持全球第一,新质生产力的加快发展,将加速推动我国…

数据库对象中出现复杂的对象嵌套,如何使用Mybatis plus优雅的解决这个问题:

起因 类原型: 在User类: package com.itheima.mp.domain.po;import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.IdType; import java.time…

VBA:随机生成100以内两位数加减法练习

给儿子用,每天一百道,哈哈哈 Sub add_ranknum()Dim num1 As Integer, num2 As Integer, num3 As Integer, temp As Integer Dim operat As StringFor c 1 To 10 Step 2 For i 1 To 20 NX:Randomizenum1 Rnd * 99num2 Rnd * 99If num1 num2 Then GoT…

在linux上创建android构建环境

1.先安装java环境(此处我安装的是amazon的jdk) java8 后续环境需java17 wget https://corretto.aws/downloads/latest/amazon-corretto-8-x64-linux-jdk.tar.gz sudo wget wget https://corretto.aws/downloads/latest/amazon-corretto-17-x64-linux-jdk.tar.gz 解压 sudo…

阿里云ubuntu宝塔面板部署uni-app-flask-websocket前后端项目

1.下载宝塔面板 wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed8484bec 然后去安全组开放对应的端口 面板账户登录信息 【云服务器】请在安全组放行 29725 端口 进入控制面板后修改默认用户名和密码 2. …

HTML 相册2.0 通过css 获取图片资源 2024/7/22 日志

简单方法通过css 绕过同源策略 以获取资源 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>水面倒影…

从理论到实践:如何用 TDengine 打造完美数据模型​

在用 TDengine 进行数据建模之前&#xff0c;我们需要回答两个关键问题&#xff1a;建模的目标用户是谁&#xff1f;他们的具体需求是什么&#xff1f;在一个典型的时序数据管理方案中&#xff0c;数据采集和数据应用是两个主要环节。如下图所示&#xff1a; 对于数据采集工程师…

Python中的__new__方法及实现单例模式

在Python中&#xff0c;类的实例化过程通常由两个主要方法控制&#xff1a;__new__和__init__。虽然我们大多数时候只需要关注__init__方法&#xff0c;但__new__方法在某些高级用例中非常有用。本文将详细介绍__new__方法&#xff0c;解释其定义、使用场景以及与__init__方法的…

EXCEL怎么自动添加表格吗?

第一步&#xff0c;选中需要添加表格的范围 第二步&#xff0c;点击开始&#xff0c;选择条件格式&#xff0c;“使用公式确定要设置格式的单元格” 第三步&#xff0c;编辑规则说明加上<>"" 第四步&#xff0c;点击边框&#xff0c;选择外边框确定即可&#x…

matlab 中的methods(Access = protected) 是什么意思

gpt版本 在 MATLAB 中&#xff0c;methods 是用于定义类方法的一部分。(Access protected) 是一种访问控制修饰符&#xff0c;它限制了方法的访问权限。具体来说&#xff0c;当你在类定义中使用 methods(Access protected) 时&#xff0c;你是在定义只有类本身及其子类可以访…