怎样理解选择排序

【推荐100个unity插件】皮毛shader着色器 实现可以用动的毛茸茸毛绒绒效果 Unity内置渲染管线毛发着色器实现 摘要:本文介绍了Unity内置渲染管线下的毛发着色器实现方案。该方案通过多层渲染技术模拟毛发效果,支持基础光照模型(环境光、漫反射和镜面反射),提供毛发长度调节功能。主要包含10个渲染通道,采用逐步增加的FURSTEP参数(0.05-0.55)分层渲染毛发,每层使用相同的着色器代码但不同参数值。该实现仅适用于内置渲染管线,不支持毛发动态效果,代码结构简洁,通过FurHelper.cginc包含核心着色逻辑。 阅读详情

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

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

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

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

零基础学习CANoe Panel(17)—— Panel CAPL Function CANoe内置了几个CAPLFunction,允许我们在CAPL运行时动态的更改Panel控件的属性,比如打开某个panel,禁用某个控件,更改控件颜色等。 阅读详情

相关推荐

ANSYS Twin Builder实战:5步搞定数字孪生模型部署(附ROM配置技巧)

本文详细解析了ANSYS Twin Builder在数字孪生模型部署中的实战应用,重点介绍了ROM(降阶模型)配置技巧。通过5个关键步骤,从环境搭建到工业部署,帮助工程师高效实现高精度三维仿真到轻量化数字孪生的转化,提升预测性维护和系统仿真效率。

weixin_27330481的博客 661

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

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

weixin_44475093的博客 567

AI提示词设计中的批判性思维训练方法

在人工智能应用中,提示词(prompt)设计是影响生成内容质量的关键因素。通过引入批判性思维框架,可以有效提升AI输出的逻辑性和多样性。该方法基于目的澄清、证据评估、假设检验和多视角分析四大支柱,构建结构化的问题拆解和证据链。在学术论文辅助写作、商业决策模拟等场景中,这种训练方式能显著提高内容质量,特别适合学生、职场人士和内容生产者。结合思维可视化工具和本地知识库,可以实现从基础应用到专家级分析的进阶。

weixin_33624741的博客 229

什么是选择排序?

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

mukewangguanfang的博客 4795

mobaXterm连接vmWare虚拟机上的centOS7提示连接失败的解决方法

1.问题描述: mobaXterm安装后连接虚拟机vmWare上的centOS7发现连接不上,如下图所示: 2.解决方法 先是查了一下centOS的ip 开始错误的以为 virbr0: 后面的inet就是虚拟机的IP 实则不然(正确的ip是在ens33后面的inet中的ip,大佬们勿喷) 这个值需要配置一下的,具体配置过程如下: step1: 进入centOS下的/...

hss19214的博客 7890

机器学习第五章之决策树模型

机器学习专题系列

wangyutao12345的博客 5185

选择排序原理

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

weixin_52875557的博客 2939

scGPT实战指南:如何用生成式AI加速你的单细胞多组学研究?

本文提供了scGPT在单细胞多组学研究中的实战指南。详细介绍了从环境部署、数据预处理到细胞类型注释与扰动预测等核心任务的操作流程。通过利用生成式AI和Transformer基础模型,scGPT能够显著加速分析,并提升细胞注释的准确性及基因调控网络推断的深度,为研究人员提供了强大的AI分析引擎。

weixin_29215815的博客 402

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

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

冷血之心的博客 2万+

嵌入式开发避坑指南:手把手教你用STM32CubeMX配置W9825G6KH SDRAM(含时序参数详解)

本文详细介绍了如何使用STM32CubeMX配置W9825G6KH SDRAM,包括硬件连接检查、CubeMX初始化步骤、时序参数优化及稳定性问题排查。通过实测波形分析和案例分享,帮助开发者避免常见配置错误,提升嵌入式系统性能与稳定性。

weixin_42542669的博客 197

儿童启蒙教育APP

pinyinList.add(createPinyin("a", "啊,像阿姨的阿", R.raw.pinyin_a));pinyinList.add(createPinyin("i", "衣,像衣服的衣", R.raw.pinyin_i));pinyinList.add(createPinyin("u", "乌,像乌鸦的乌", R.raw.pinyin_u));pinyinList.add(createPinyin("ü", "鱼,像小鱼的鱼", R.raw.pinyin_v));-- 固定竖屏 -->

寒寒豆豆软件公司的博客 167

选择排序再理解

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

无痕之意的博客 4677

CCF编程培训师资认证(PTA)标准(教学能力T)

随着计算机科学的不断发展,计算机相关技术应用到社会各个行业,越来越多的青少年参加到了计算机程序设计的学习中,这对编程培训教师提出了更高的专业要求和职业要求。CCF开展编程培训师资认证项目(Programming Trainer Accreditation,PTA),旨在建立一个规范的、科学的、权威且有公信力的三方认证。认证考试分编程专业能力(P)和教学能力(T)两部分。本标准根据《CCF编程培训师资认证条例》第十条制定,旨在明确教学能力(T)的测试标准。

lan_in的博客 1712

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

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

优快云_XHC的博客 184

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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

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

Butayarou的博客 318

jre9下载 jdk9

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

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

余额充值