排序(一):选择排序

漫谈经典排序算法:一、从简单选择排序到堆排序的深度解析 1、序言 这是《漫谈经典排序算法系列》第一篇,该篇从最简单的选择排序算法谈起,由浅入深的详细解析两种选择排序算法的过程及性能比较。逐步揭露选择排序的本质及其基本思想。 各种排序算法的解析请参考如下: 《漫谈经典排序算法:一、从简单选择排序到堆排序的深度解析》 《漫谈经典排序算法:二、各种插入排序解析及性能比较》 《漫谈经典排序算法:三、冒泡排序 && 快速排序》 《漫谈经典排序算 阅读详情

一、步骤
1、找到数组中的最小元素;
2、将第一步找到的最小元素与数组第一个元素交换位置(如果第一个元素就是最小元素则和自己交换);
3、在剩下的元素中找到最小元素,将它与第二个元素交换位置。如此反复,直到将整个数组排序。

二、优缺点
1、运行时间和输入无关。为了找出最小的元素而扫描一遍数组并不能为下一次扫描提供什么信息。这种性质在某些情况下是缺点,因为一个有序的数组或是主键全部相等的数组和一个元素随机排列的数组所用的排序时间是一样的。
2、数据移动最少。假设长度为N的数组,每次交换都会改变两个数组元素的值,因此选择排序用了N次交换,交换次数跟N成线性关系。而大多数其他算法增长数量级都是线性对数或者平方级别。

三、实现

public <T> void sort(Comparable<T>[] arr) {
        for(int i=0;i<arr.length;i++) {
            int min = i;

            for(int j=i+1;j<arr.length;j++) {
                if(less(arr[j], arr[min])) {//下标为j的元素是否小于下标为min的元素
                    min = j;
                }
            }

            exch(arr, i, min);//下标为i的和下标为min的元素互换位置
        }
    }
一文学懂经典算法系列之:直接选择排序(附讲解视频) 本文关键字:经典算法、排序算法、选择排序、直接选择排序、算法实践。选择排序的核心思想是:每一趟从无序区中选出关键字最小的元素,按顺序放在有序区的最后(生成新的有序区,无序区元素个数减1),直到全部排完为止。...... 阅读详情

相关推荐

Multisim新手必看:从零搭建数字时钟仿真电路(附完整原理图)

本文详细介绍了如何使用Multisim从零开始搭建数字时钟仿真电路,涵盖晶振电路设计、计数电路实现、校时功能配置等关键步骤。通过完整的原理图和实用技巧,帮助新手快速掌握Multisim仿真设计,实现精准的数字时钟功能。

ios99的博客 328

选择排序法介绍及实现

一、选择排序法介绍 它得算法就是一句话:选出最小的数,把它放到前面。 二、Java代码实现 public class SelectSort { public int[] sort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { int index = i;// 每趟的最小值下标 for (int j = ind...

qq_36890813的博客 201

华为AR6140E/S5735设备密码策略配置全攻略:从复杂度到锁定机制

本文详细介绍了华为AR6140E/S5735设备的密码策略配置方法,涵盖密码复杂度、时效性和防护性三大核心维度。通过具体的CLI命令示例,指导管理员如何设置密码长度、字符组合、有效期及登录失败锁定等安全机制,为企业网络提供全面的用户名密码防护策略。

weixin_30836759的博客 531

十大经典排序算法

第1关:冒泡排序 任务描述 本关任务:实现冒泡排序算法,并将乱序数列变成升序。 相关知识 为了完成本关任务,你需要掌握:1.冒泡排序算法。 冒泡排序算法 冒泡排序重复地遍历待排序的数列,每次比较两个相邻元素,如果它们的顺序错误就把它们交换。重复地进行遍历直到没有再需要交换时表示数列已经排序完成。 算法步骤: 比较相邻的元素:若第一个比第二个大,则交换; 遍历开始第一对到结尾最后一对,执行步骤1; 重复步骤1~2,直到排序完成。 可.

m0_52551910的博客 1万+

正交试验minitab

1.创建正交试验 2.根据自己的实验选择水平数和因子数,并选定一个正交表 3.得到正交表 4.填写实验结果 5.进行正交分析 点击结果,点击分析 6.得到分析结果 7.方差分析 选择响应变量与因子,点击确定 得到方差分析的结果 ...

a999999123的博客 1万+

中职网络安全2021年国赛Wireshark流量分析题目解析

中职网络安全Wireshark流量分析题目解析

FRANXX_02的博客 6440

排序算法之选择排序

思路 首先,找到数组中最小的元素,拎出来,将它和数组的第一个元素交换位置,第二步,在剩下的元素中继续寻找最小的元素,拎出来,和数组的第二个元素交换位置,如此循环,直到整个数组排序完成。 至于选大还是选小,这个都无所谓,你也可以每次选择最大的拎出来排,也可以每次选择最小的拎出来的排,只要你的排序的手段是这种方式,都叫选择排序 我的理解: 类似双指针:外层指针,内层指针。 **外层指针:**负责控制遍...

卢国舅的博客 177

汽车级智能栅极驱动器深度解析 | 连载01:DRV871x-Q1系列产品架构与核心特性

集成度:单芯片集成多通道驱动器、电源管理、电流检测智能化:自适应控制算法,减少外部元件可靠性:多重保护机制,满足汽车级要求灵活性:SPI和硬件两种接口,适应不同应用需求。

VehSwHwDeveloper的博客 1151

educoder—java数据结构之第一关选择排序答案

第一关:选择排序 编程要求 本关的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下: 补全void sort(int arr[])方法,实现选择排序,对数组arr中的元素排序,并输出每一次排序后的结果。 具体请参见后续测试样例。 测试说明 测试过程: 平台将创建用户补全后的SelectionSort类的对象, 调用对象的sort(int arr[])方法,对arr中的数据排序,并输出每一次排序后的结果。 接着根据程序的输出判断程序是否...

W_Oilpicture的博客 2934

如何对正射影像DOM(卫星影像、无人机航拍影像)进行拼接、合并以及去黑边(附 Global Mapper Pro 24.0 安装包(中文注册版))

为什么要对正射影像DOM进行拼接?影像去黑边、影像拼接的操作和步骤。

从地图看世界的专栏 4298

Ceres&OpenCV 单目相机标定(论文复现)

Ceres&OpenCV 单目相机标定(论文复现)

dayuhaitang1的博客 370

十大排序①:插入、选择和交换排序

插入排序(直接插入、折半插入和希尔排序)选择排序(直接选择和堆排序)交换排序(冒泡和快速排序)的逻辑及代码

qq_39377889的博客 3967

CANOE-介绍 @014-基于CAPL的Someip测试(CANOE 15.0/16.0/17.0)【草稿】发送事件、方法

摘要:本文介绍了使用CANoe 16.0及更高版本配置SOME/IP测试环境的方法,包括硬件连接、工程配置和CAPL代码实现。SOME/IP是一种面向服务的车载通信协议,支持服务发现、事件推送和方法调用。文章详细说明了网络拓扑配置、数据库文件加载等步骤,并提供了CAPL代码示例,展示如何初始化多个应用端点(15个不同端口)和服务实例(73个服务),通过SomeIpOpenLocalApplicationEndpoint和SomeIpCreateProvidedServiceInstance函数实现。配置过程

沿流不止 424

每日一排序:选择排序

选择排序:不稳定,时间复杂度为O(n^2),尽量不要使用(除非题目要求一定要用)

WhereIsHero的博客 312

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

排序(一):选择排序法

/** * <br>选择排序</br> * O(n^2) */ public class SelectionSort { /** * 选择排序思想: * 从第一个位置开始,找到后面最小的元素,然后与第一个位置的元素交换, * 这样,第一个位置的元素就是最小的元素了; * 然后从第二个位置开始,依次重复上面的步骤。 ...

G0_hw 303

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

排序算法一:选择排序

最简单也最没用的一种算法,时间复杂度为O(n²),而且不稳定,工程中一般不用… 思想:指定一个当前最小数(一般选第一个数),记录其下标为minpos,将它与后面的每一个数依次比较,若有数小于当前最小数,则交换两者的下标,并交换两个数的位置,重复上述步骤直到排好序 平均时间复杂度:O(n²),空间复杂度:1,不稳定 public class Test { public static v...

少年Dream 204

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

排序算法一:冒泡、选择、插入排序

从过程上分析,我们需要以一个数为基准,遍历它左边的数,来找到基准数合适的插入位置,然后将基准数左边的比它大的数都右移一位,给基准数挪出位置,在将基准书插入到这个位置中。如图所示,不难看出,7个元素的数组,经过6次选择(即选择出未固定的最小数)固定出了数组内的所有数位置。插入排序若是递增序列,有n-1次插入,每次插入要比较 i 次(i是以n为基数的),所以时间复杂度为O(n^2),若是递减序列,有n-1次插入,每次插入要比较1次,然后进行i-1-k次右移操作(i和j均以n为基数),所以也是O(n^2)。

kkkkkkbon的博客 1253

一种类选择排序:煎饼排序

煎饼排序

CS_boy的博客 473

排序算法一:选择排序、冒泡排序、插入排序

文章目录经典排序方法概览一、选择排序二、冒泡排序三、插入排序四、归并排序五、快速排序 经典排序方法概览 排序方法 时间复杂度 最佳情况 额外空间复杂度 是否稳定 选择排序(Selection Sort) O(n2)O(n^{2}) O(n2) O(n2)O(n^{2}) O(n2) T(1)T(1) T(1) 否 冒泡排序(Bubble Sort) O(n2)O(n^{2}) ...

zealband的博客 229

排序(一):冒泡排序,插入排序,选择排序

本次介绍 : 冒泡排序,插入排序,选择排序 一、冒泡排序 1.原理 : 在无序区间,通过相邻数的比较,将最大的数冒泡到无序区间的最后,持续这个过程,直到数组整体有序。 2.实现(升序): public static void bubbleSort(int[] array) { for(int i = 0;i < array.length; i++){ for(int j = 0;j < array.length - i - 1; j++){ if(array[j] > arra

Kakarotto_的博客 260

排序系列一: 选择排序法

Hello,大家好!应广大"鸟友"强烈要求,小编将会推出《排序系列》,给大家讲讲排序那些事。 那么今天首先给大家讲解最符合人类思维逻辑的超简单排序法☞《选择排序法》。 顾名思义,选择排序法就是"先选后排"。假定待排序数字序列均为整数,且共有NUM个,大小随机排列,存放在list[NUM]中。 ...

Leon的博客 353

六大排序(一):插入,冒泡,选择排序

这个一次就完成了,但依然会继续接下来比较,只是没有交换而已。

2403_86498269的博客 1198

【干货总结】排序算法一:冒泡排序、插入排序、选择排序

本文介绍的三种排序,平均复杂度均为,属于基础排序方法。本文的所有代码均以原地排序为默认要求,即不返回新的列表,在原列表上更改元素位置实现排序。 冒泡排序 算法思路:循环(n-1)次,第i次遍历前(n-i+1)个元素(即第一次遍历前n个元素),若相邻两元素前者比后者大,则交换位置。这样的话,第i次遍历便将第i大的数挪到了倒数第i位,(n-1)次循环后,第二小的数被挪到了第二位,那么最小的数一定是在第一位,这也是为什么只需要(n-1)次而不是n次。 时间复杂度: 1. 最坏情况 2. 平均情况...

weixin_45397944的博客 202

算法-排序分析一:选择排序和插入排序

一、选择排序 一种最简单的排序: ①首先,找到数组中最小的那个元素 ②其次,将它和数组的第一个元素交换位置 ③再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。 如此反复,直到将这个数组排序。 代码实现:(java实现) public class Selection {   //将a[]按升序排列   public static void sort(...

weixin_30497527的博客 74

排序算法系列一:选择排序、插入排序 与 希尔排序

每轮循环选出本轮最小元素置于数组首位,然后从剩余元素中开启下一轮循环。

暗黑世界 971
上一篇: 年终感悟
下一篇: 排序(二):插入排序
H阿布
博客等级 码龄12年 24粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值