怎样理解选择排序

ThreeJS教程:地图案例(包围盒、正投影) 推荐:将加入你的3D工具链。 阅读详情

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

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

用内层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]
     */
}

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

【MDC开发者实战】多传感器融合算法在自动驾驶中的配置与优化 本文详细介绍了华为MDC平台在自动驾驶中多传感器融合算法的配置与优化实践。通过前融合与后融合技术,结合摄像头、激光雷达和毫米波雷达的数据,提升感知精度与可靠性。文章还分享了ARXML配置、标定技巧、算法调优及性能优化等实战经验,帮助开发者高效实现自动驾驶系统的传感器融合。 阅读详情

相关推荐

建议收藏:华为海思IC设计笔试题,含解析(附下载)

接触过的部门有麒麟芯片、CPU/GPU,总体面试感觉非常好,规范且认真,第一轮手撕代码状态机+复盘机考题+瞄准几个知识点深挖,时间1hour+;一二轮面试是连着的,所以很累。但是岗位就那么多,在面试的时候,很多同学因为准备不充分,与岗位失之交臂,无缘进入该公司。时序电路有记忆功能,不会产生锁存器,锁存器一般在组合逻辑中case写不全,else写不全,或者敏感列表写不全。

nuoweishizi的博客 3288

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

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

weixin_44475093的博客 567

4. PCIe 接口时序

在上一篇中,大致介绍IPcore接口。总的来说接口如下图数据的接收和发送通过transmitTLPinterface和ReceiveTLPinterface。收发数据的时序也只是描述这几个接口的关系。从手册上截取PCIex1的接口时序。

jjinl的专栏 6123

什么是选择排序?

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

mukewangguanfang的博客 4795

VScode远程连接开发嵌入式开发板

VScode远程连接开发调试嵌入式开发板

qq_53221728的博客 5892

论文翻译:2024 High-Confidence Computing A survey on large language model (LLM) security and privacy: The

大型语言模型(LLMs),如ChatGPT和Bard,已经彻底改变了自然语言理解和生成。它们具有深度语言理解能力、类似人类的文本生成能力、上下文意识和强大的问题解决技能,使它们在各个领域(例如搜索引擎、客户支持、翻译)中变得不可或缺。同时,LLMs也在安全领域获得了关注,揭示了安全漏洞并展示了它们在安全相关任务中的潜力。本文探讨了LLMs与安全性和隐私的交集。具体来说,我们研究了LLMs如何积极影响安全性和隐私,与它们使用相关的潜在风险和威胁,以及LLMs内部的固有漏洞。

CSPhD-winston的博客 1722

选择排序原理

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

weixin_52875557的博客 2939

【Arduino 动手做】构建一个迷你 Las Vegas RGB LED 球体

《Arduino迷你拉斯维加斯球体项目:15岁少年的创意挑战》 15岁的Ben通过本项目展示了如何利用Arduino平台制作一个经济实惠的迷你拉斯维加斯球体夜灯。该项目涉及LED选择(采用WS2812B可编程灯带)、电子元件配置(含Arduino Nano微控制器和红外遥控)以及3D建模设计(100毫米直径球体)。项目难点包括LED布局优化、供电方案设计和3D打印外壳制作。Ben详细记录了从背景研究、电路设计到最终实现的完整过程,特别强调了分辨率与成本的平衡,以及如何通过白色扩散器改善视觉效果。这个项目不仅

雕爷学编程 1024

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

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

冷血之心的博客 2万+

【2DWT:2维离散小波变换(附Pytorch代码)】

图像信号具有非平稳特性,无法使用一种确定的数学模型来描述,而小波变换的多分辨率分析特性很好地解决了这个问题。小波变化的多分辨率特性使其既可以高效描述图像的平坦区域(低频信息、全局信息),也可以有效处理图像信号的局部突变(高频信息,即图像的边缘轮廓等部分)。小波变换在空域和频域同时具有良好的局部性,使其可以很好地聚焦到图像的任意细节。

NorthSmile的博客 1万+

手把手教你学Simulink——基础储能管理场景实例:基于Simulink的压缩空气储能(CAES)系统简化模型仿真

本文介绍了基于Simulink的压缩空气储能(CAES)系统简化模型仿真方法。CAES作为大规模长时储能方案,相比锂电池具有成本低、寿命长等优势。文章详细讲解了AA-CAES系统组成、热力学建模理论,以及Simulink实现流程,包括储气室、压缩机、膨胀机等核心模块的建模方法。通过8小时充电(50MW)和6小时放电(40MW)的仿真,验证了系统可实现60%往返效率。该模型为理解CAES系统运行机制提供了实用工具,并指出热管理、储气室特性等工程实践要点,为新型电力系统储能规划提供了仿真基础。

MHD0815的博客 171

选择排序再理解

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

无痕之意的博客 4677

Windows 11 安装 OpenClaw(龙虾):不用WSL、不用虚拟机、启动、使用、停止、卸载

本文详解 Windows 11 原生安装 OpenClaw(龙虾)全流程,无需 WSL 或虚拟机。涵盖环境配置、安全警示、模型接入(如通义千问)及技能初始化。提供启动、文件自动化操作、停止与卸载的完整指南,并附常见认证过期解决方案。助您快速部署本地 AI 智能体,实现电脑操作自动化,提升工作效率。

寒水馨 · 轻量级技术文档 · hanshuixin.org 901

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

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

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

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

优快云_XHC的博客 184

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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

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

Butayarou的博客 318

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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、付费专栏及课程。

余额充值