怎样理解选择排序

【ANSYS APDL】提取结构刚度矩阵完整过程--附Python代码实现 ANSYS的结构刚度矩阵提取中一些操作技巧 阅读详情

为什么叫选择排序:就是先选择出最小的放前边(最大放后边)

选择排序,和冒泡排序一样,还是双层循环

用内层for选择出最小,然后把最小交换到最前,只需要交换一次.

原数组:[5, 8, 6, 3, 9, 2, 1, 7]
第0轮[] - [5,8,6,3,9,2,1,7]剩余最小数array[6]=1.交换5和1
第1轮[1] - [8,6,3,9,2,5,7]剩余最小数array[5]=2.交换8和2
第2轮[1,2] - [6,3,9,8,5,7]剩余最小数array[3]=3.交换6和3
第3轮[1,2,3] - [6,9,8,5,7]剩余最小数array[6]=5.交换6和5
第4轮[1,2,3,5] - [9,8,6,7]剩余最小数array[6]=6.交换9和6
第5轮[1,2,3,5,6] - [8,9,7]剩余最小数array[7]=7.交换8和7
第6轮[1,2,3,5,6,7] - [9,8]剩余最小数array[7]=8.交换9和8
第7轮,[1, 2, 3, 5, 6, 7, 8, 9],剩余最小数array[7]=9.没有需要交换

 

package sort.selection;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @description: 选择排序
 * 每一轮先选出最小元素,把最小元素放到第一个位置
 * @author:tao
 * @create: 2019-12-27 16:01
 */
public class SelectionSort {


    @Test
    public void selectionSortTest() {
        int []array = {3, 45, 7, 4, 24, 77, -2};
        System.out.println("原数组:" + Arrays.toString(array));
        selectionSort(array);
        System.out.println("排序数组:" + Arrays.toString(array));
    }

    @Test
    public void selectionSortTest2() {
        int []array = {5, 8, 6, 3, 9, 2, 1, 7};
        System.out.println("原数组:" + Arrays.toString(array));
        selectionSort(array);
        System.out.println("排序数组:" + Arrays.toString(array));
    }

    private void selectionSort(int[] array) {
        int forTimes = 0;
        int swapTimes = 0;

        for (int i = 0; i < array.length; i++) {
            int minValueIndex = i;
            for (int j = i+1; j < array.length; j++) {
                minValueIndex = array[j] < array[minValueIndex] ? j : minValueIndex;
                // forTimes test代码
                forTimes ++;
            }
            if (array[i] > array[minValueIndex]) {
                // swapTimes test代码

                soutLog(array, i, minValueIndex);
                swapTimes ++;


                int temp = array[i];
                array[i] = array[minValueIndex];
                array[minValueIndex] = temp;

            } else {
                System.out.println("第" + i + "轮," + Arrays.toString(array) + ",剩余最小数array["+ minValueIndex +"]=" + array[minValueIndex] + ".没有需要交换");
            }

        }
        System.out.println("循环次数forTimes = " + forTimes);
        System.out.println("发生交换次数swapTimes = " + swapTimes);
    }

    /**
     * 打印日志 便于观察
     * @param array
     * @param i
     * @param minValueIndex
     */
    private void soutLog(int[] array, int i, int minValueIndex) {
        List<String> sortList = new ArrayList<>();
        List<String> unSortList = new ArrayList<>();
        for (int i1 = 0; i1 < array.length; i1++) {
            if (i1 <= i-1) {
                sortList.add(array[i1] + "");
            } else {
                unSortList.add(array[i1] + "");
            }
        }
        System.out.println("第" + i + "轮[" + String.join(",", sortList) + "] - [" + String.join(",", unSortList) +
                "]剩余最小数array["+ minValueIndex +"]=" + array[minValueIndex] + ".交换" + array[i] + "和" + array[minValueIndex]);
    }

    /**
     原数组:[5, 8, 6, 3, 9, 2, 1, 7]
     第0轮[] - [5,8,6,3,9,2,1,7]剩余最小数array[6]=1.交换5和1
     第1轮[1] - [8,6,3,9,2,5,7]剩余最小数array[5]=2.交换8和2
     第2轮[1,2] - [6,3,9,8,5,7]剩余最小数array[3]=3.交换6和3
     第3轮[1,2,3] - [6,9,8,5,7]剩余最小数array[6]=5.交换6和5
     第4轮[1,2,3,5] - [9,8,6,7]剩余最小数array[6]=6.交换9和6
     第5轮[1,2,3,5,6] - [8,9,7]剩余最小数array[7]=7.交换8和7
     第6轮[1,2,3,5,6,7] - [9,8]剩余最小数array[7]=8.交换9和8
     第7轮,[1, 2, 3, 5, 6, 7, 8, 9],剩余最小数array[7]=9.没有需要交换
     循环次数forTimes = 28
     发生交换次数swapTimes = 7
     排序数组:[1, 2, 3, 5, 6, 7, 8, 9]
     */
}

相比较冒泡排序,空间时间负责度并没有减少,但是减少了数据交换次数.

ROS2_Moveit2_Ur5e_Grasp项目详解(二):核心模块功能解析 本文深入解析了ROS2_Moveit2_Ur5e_Grasp项目的核心模块功能。重点阐述了OctoMap建图模块如何为机械臂提供实时三维环境感知,并详细介绍了Robotiq夹爪与MoveIt2的集成控制、UR5e的运动规划策略,以及视觉模块如何协同工作,最终实现从目标检测到动态抓取的完整闭环。 阅读详情

相关推荐

YOLOv5模型转换陷阱:从PT到RKNN的置信度异常与乱框问题深度解析

本文深度解析了YOLOv5模型从PT到RKNN转换过程中的置信度异常与检测框错乱问题,揭示了NPU硬件特性与模型结构不匹配的根本原因。通过详细的解决方案和实操步骤,包括模型修改、转换流程配置和验证技巧,帮助开发者有效解决这一常见部署难题,提升模型在瑞芯微芯片上的推理性能。

weixin_29062255的博客 905

面试官:说说你对选择排序的理解?如何实现?应用场景?

一、是什么选择排序(Selection sort)是一种简单直观的排序算法,无论什么数据进去都是 O(n²)的时间复杂度,所以用到它的时候,数据规模越小越好其基本思想是:首先在未排序的数列...

weixin_44475093的博客 567

GlobalMapper地形对比与方量计算实战:从两期数据到填挖方区域精准提取

本文详细介绍了使用GlobalMapper进行地形对比与方量计算的实战方法,从两期数据准备到填挖方区域精准提取。通过三步核心操作和实用技巧,帮助工程师高效完成土方平衡分析,提升工程预算精度。特别适用于河道整治、湿地修复等工程项目,大幅减少人工计算误差和时间成本。

weixin_28698059的博客 221

什么是选择排序?

选择排序(Select Sort),是计算机科学与技术领域中较为简单的一种排序算法。假设我们按照从小到大的顺序进行排序。选择排序会首先从待排序序列中选择一个最小的元素放入排序好的序列中,然后依次在从未排序好的序列中选择最小的元素,直到最后需要选择的待排序序列中只有一个元素,只需要将这个元素放在最后位置,就完成了整个排序过程。

mukewangguanfang的博客 4795

干扰管理学习日志4-------信道估计方法 LS(最小二乘)、MMSE(最小均方误差)

信道估计,就是从接收数据中将假定的某个信道模型的模型参数估计出来的过程。如果信道是线性的话,那么信道估计就是对系统冲激响应进行估计。需强调的是信道估计是信道对输入信号影响的一种数学表示,而“好”的信道估计则是使得某种估计误差最小化的估计算法。本文主要讲述非盲信道估计中的LS估计和MMSE估计。LS全称为,即估计的信道参数与实际信道参数的差,进行平方求和后得到的误差累积最小。MMSE估计是LS估计的改进,在LS估计的最终结果的基础上乘以加权矩阵,使之与实际信道参数更为接近。

taiyuezyh的博客 1万+

NFT图片批量合成及稀有度计算工具

一、制作背景 -当前NFT作品制作的大多方式都是使用部件拼接的形式,然后从大量的可能性结果取优; 二、解决问题 拼接合成的组合数量十分巨大,手工合成费时费力; 合成中对各个部件的使用次数不容易控制,部位出现的概率对作品的稀有度及评分影响较大; 对于生成的作品各个部位的信息(包括来源和使用率)统计繁琐,不利于对作品的介绍中体现; 三、程序功能介绍 1、功能自定义部位稀有度批量合成NFT作品 步骤一:创建各个合成部件文件夹,将图片放到文件夹内 步骤二:软件上设置各个部件对于的图片文件夹及出现的概率 步骤二

Keeping111的博客 4638

选择排序原理

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的开头。以此类推,直到全部待排序的数据元素的个数为零。 选择排序是不稳定的排序方法。 选择排序的不稳定例子很简单。 比如A 80 B 80 C 70 这三个数据从小到大排序 第一步会把C和A做交换 变成C B A 第二步和第三步不需要再做交换了。所以排序完是C B A.

weixin_52875557的博客 2939

MIPI CSI-2数据加扰技术解析:LFSR实现与多通道同步策略

本文深入解析了MIPI CSI-2协议中的数据加扰技术,该技术通过线性反馈移位寄存器(LFSR)对图像数据进行随机化处理,旨在有效降低高速传输中的电磁干扰。文章详细阐述了LFSR的工作原理、D-PHY与C-PHY物理层不同的初始化与同步策略,并探讨了多通道同步的实现方法,为高速接口的EMC设计与调试提供了实践指导。

weixin_29207149的博客 385

“深入理解”—选择排序算法

选择排序算法有两种:直接选择排序和堆排序

冷血之心的博客 2万+

2024年上半年试题二:论性能测试方法及其应用

2025年1月,我以系统分析师的身份参与了公司OA系统的开发与建设。该系统包含的功能有打卡签到、公文流转、工资查询等。我们吸取了之前由于系统使用人数激增暴露出的短时间卡顿等问题,所以在本次开发中,我们非常重视系统的性能测试。通过自动化的测试工具模拟多种正常、峰值及异常负载条件对系统的各项性能指标进行测试。性能测试在软件的质量保证中起着重要的作用,它包括的测试内容丰富多样,常见的负载测试和压力测试都属于性能测试。

银帅 548

携程机票数据爬取实战:使用 Python 获取携程网机票信息

通过本篇博客,我们详细介绍了如何使用 Python 爬取携程网的机票信息,涉及了静态网页爬取(使用 Requests 和 BeautifulSoup)和动态网页爬取(使用 Selenium)两种方法。通过获取的数据,我们不仅能够进行票价分析,还可以构建更为复杂的预测模型或趋势分析工具。爬虫技术不仅能够帮助我们收集有价值的数据,还能够为商业决策提供数据支持。在实际应用中,我们可以结合更多的分析方法,如自然语言处理、图像处理等,进一步提升数据的价值。

2201_76125261的博客 1657

选择排序再理解

  在学习了冒泡排序之后,再来学习选择排序应该就能更好理解这个算法了。   选择排序比较直观,就是从没有排序的元素中选出最大或最小的元素放到已排序好的元素后面。 选择排序  1、用第一个元素与每个元素比较,选出最大或最小的,与第一个元素交换  2、一趟比较完成之后,再从第二个元素开始比较。  3、反复执行以上步骤,只到排序完成 算法 function selectSort(nums){ le...

无痕之意的博客 4677

微信小程序流量主提升ecpm的一些方法

ecpm就是千次广告曝光收入,是一个预估的价格,而不是额定的,他是随着曝光度,用户点击度,页面访问数来决定的。

任聪聪的博客 1万+

java选择排序算法理解,[Java教程]选择排序算法和理解_星空网

选择排序算法和理解2017-08-260var arr = [1, 41, 12, 2, 5]//选择排序//a = 1, b = 41, c = 12, d = 2, e = 5//a,b,c,d,e 五人相遇了,要站一对,从高到矮排列//1、2、3、4、5//其中1号位a说话了:我最矮你们谁有意见//然后b,c,d,e不信依次和a比较,最后结果是a最矮,站最后// => a, b, c,...

weixin_35110330的博客 138

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java中对选择排序的深入理解

对于排序算法,最常用的无非就是冒泡排序和选择排序了,本文将讲解选择排序算法。 冒泡排序算法的深入理解请点击此链接 冒泡排序算法的深入理解 选择排序算法的理解: 题目:请用选择排序来排序数字(2 1 5 3 8 6) 选择排序的思路:就是每一次从这些参与比较的数字当中选择出最小的数字,并且拿着这个最小值与最左边的数字进行交换位置。 核心思路:找出一组数字中的最小的数字 具体步骤: 参与比较的数字:2 1 5 3 8 6(第一次循环) 假设第一个数字2是最小的; 拿着2与1进行比较,发现1比2小,所以此时.

优快云_XHC的博客 184

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

让你理解选择排序(C语言)

选择排序,原理就是将当前的单个数据(设为cur)依次与其后的所有数据进行比较后,选择其后数据的最小值与cur进行位置交换。然后将下标+1(变更cur),重复上述操作,直至所有元素排序完毕。

Butayarou的博客 318

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java小白 选择排序原理理解

选择排序原理 #原理 选择排序原理是在一个数组中选择一个固定的数(最大或最小),每次都拿这个数与剩余的数比较,把最大(最小)的数值赋给固定的数,再按顺序组成新的数组,一直如此执行,直到拿到全部. 举例证明 举一个例子: int [] array={80,1,14,56,12,100}; 按照从小到大的顺序排列 第一步:规定下标=0,即80为最小固定数,开始排序 ①:下标0和下标1比较.80与1比较,1的值最小,所以把1的值赋给最小固定值;结果是[1,80,14,56,12,100]. ②:下标0和下标2比较

newuer的博客 240

对选择排序的理解

以下任何言论都完全是个人的理解,如有雷同纯属巧合,如有错误,希望大家多多指出,共同学习!谢谢!

EvanWang1987的专栏 1778

理解JS中选择排序

选择排序 算法原理[理解] 将第一位依次与后面的元素相比较,得到最小值,与第一位交换。 再用第二位依次与后面元素相比较,得到最小值,与第二位交换。 从原始数据中找到最小元素,并放在数组的最前面。然后再从下面的元素中找到最小元素,放在之前最小元素的后面,直到排序完成 以下是实现该算法的代码 // 两个值互相比较,小的值放在前面 // 将第一位依次与后面的元素相比较,得到最小值,与第一位交换。 // 再用第二位依次与后面元素相比较,得到最小值,与第二位交换。 for (var i = 0; i <

CedricD的博客 296

选择排序的理解

理解: 将数组中所有元素中最小的元素找出来,然后与第一个元素交换。然后将剩下的所有元素中找出最小的元素找出来,与第二个元素交换,以此类推,最后得出结果。(注意:第一层循环只要比较length-1次就好了,因为最后一个已经不需要比较;第二层循环要比较length次,因为从自身开始比较,下标互换) 代码: public class Select { public static void mai...

三千炼心的博客 774

选择排序法和冒泡排序法最简单粗暴的理解

选择排序法和冒泡排序法最简单粗暴的理解

m0_70833551的博客 184

选择排序精简理解

原理:遍历数组,从第一个开始,将其与剩余的元素进行比较,记录最小的元素及其所在的位置,结束后,将其与应该放到的位置上的元素对调,直到完成排序。 借用网上的动图直观的看下: 思想:两个循环,外循环记录位置及进行最后的交换,内循环进行比较及确定最小的元素。 上代码:   /** * @param {Object} array 需要排序的数组 *...

weixin_38166689的博客 89

简单选择排序 | 通俗易懂的理解排序过程

谢谢你们。

是圣洁呀✨ 1402

对于冒泡和选择排序算法的一些理解

对冒泡和选择两种排序算法的小理解

m0_52563687的博客 315

算法 & 理解冒泡、选择排序

轻松理解冒泡、选择排序

Thinking anywhere anytime. 159

【八大数据排序法】选择排序法的图形理解和案例实现 | C++

排序算法是我们在程序设计中经常见到和使用的一种算法,它主要是将一堆不规则的数据按照递增或递减的方式重新进行排序。在如今的互联网信息时代,随着大数据和人工智能的发展,大型企业的数据库中有亿级的用户数据量。因此对其进行处理,排序算法也就成为了其中必不可缺的步骤之一。

PIONEER 950
上一篇: 怎样理解冒泡排序
下一篇: 怎样理解插入排序
小涛_foxiaotao
博客等级 码龄14年 2粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值