算法学习1-选择排序

S32K144-EB tresos GPT驱动模块配置详解 GPT通用计时器,在S32K144这款芯片上,有4个外设模块,最多38各通道可以作为GTP的计时器通道,具体详细的大家可以去看芯片手册。这里咱们只管怎么用EB来配置GPT驱动。 阅读详情

基础排序算法:选择排序


算法的主要思想

选择排序(Selection sort)是一种简单直观的排序算法。核心思想就是每次找到未排序序列中最小(最大)的数交换到未排序序列的最前面,经过若干个步骤后,序列就变成有序。简单来说就是找到序列中最小的数放到第一个位置,接着在剩下的序列中找到最小的数放到第二个位置,依次类推

具体实现过程

每一次都是找到没有排序好的序列中的最小值,然后交换到已排好的后面,直至排好所有元素,过程参考如下:
选组排序例子

这里介绍一个算法学习的可视化网站,对于一些算法的实现过程进行演示,加强对思路的理解。(推荐点进去玩玩)
网站地址:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

代码实现

代码如下(示例):


public class Solution {
	//nums 待排序数组
    public int[] selectSort(int[] nums) {
        int len = nums.length;
        // i:上述具体实现过程中下面那个箭头所指的下标
        // 当i到了最后一个元素时,说明已经排好序,不需要继续寻找未排序的最小值
        // 所以这里是len-1
        for (int i = 0; i < len - 1; i++) {
        	// [i,len-1]指未排序的区间
            // 选择区间 [i, len - 1] 里最小的元素的索引,交换到下标 i
            int minIndex = i;
            for (int j = i + 1; j < len; j++) {
                if (nums[j] < nums[minIndex]) {
                    minIndex = j;
                }
            }
            swap(nums, i, minIndex);
        }
        return nums;
    }

    private void swap(int[] nums, int index1, int index2) {
        int temp = nums[index1];
        nums[index1] = nums[index2];
        nums[index2] = temp;
    }

    public static void main(String[] args) {
        int[] nums = {5, 9, 7, 3, 2};
        Solution solution = new Solution();
        int[] res = solution.selectSort(nums);
        System.out.println(Arrays.toString(res));
    }
}

性能分析

1.时间复杂度

选择排序的比较次数与序列的初始排序无关。 假设待排序的序列有 N 个元素,则比较次数总是N (N - 1) / 2。选择排序的交换操作介于 0 和 (n - 1) 次之间,交换次数O(n),最好情况是,已经有序,交换0次;最坏情况交换n-1次,既然知道了交换次数的情况就可以知道赋值操作的情况,赋值有三步,因而选择排序的赋值操作介于 0 和 3 (n - 1) 次之间
所以,综合以上,选择排序的时间复杂度为 O(N2)。

2.稳定性

选择排序是不稳定的排序算法,因为无法保证值相等的元素的相对位置不变,例如 [3, 4, 3, 1, 5]这个数组,第一次交换,第一个3和1交换位置,此时原来两个3的相对位置发生了变化。


博主java小白,记录一下自己的个人学习理解,有问题之处,欢迎指正。觉得不错的,点赞评论支持一下。

Windows 10/11下彻底卸载Chrome的终极指南(附一键清理注册表脚本) 本文提供了一份在Windows 10/11系统中彻底卸载Google Chrome浏览器的终极指南。针对标准卸载后用户数据与注册表项残留的问题,文章详细介绍了从应用程序层、用户数据层到系统集成层的三层深度清理方法,并重点提供了安全高效的注册表清理脚本,确保浏览器所有痕迹被完全移除,解决重装冲突并释放磁盘空间。 阅读详情

相关推荐

3D高斯泼溅实战:如何用自采数据集训练出高质量3D模型(附COLMAP避坑指南)

本文详细介绍了使用自采数据集训练高质量3D高斯泼溅模型的完整实战流程。从数据采集规范、COLMAP稀疏重建的深度配置与避坑指南,到数据格式转换及3DGS训练调优策略,提供了针对自采数据的关键参数调整与问题排查方案,帮助读者高效构建专属3D场景。

g9h0i1的博客 956

数据结构---选择排序(Python)

选择排序 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一...

rongpeisheng666的博客 258

Unreal 从入门到进阶 之 如何实现Pixel Streaming

Unreal Engine 5 (UE5) 的 Pixel Streaming 是一项基于云端的实时流媒体技术,允许将 UE5 应用的高质量图形渲染结果通过 WebRTC 协议传输到用户的浏览器或轻量级设备,同时将用户输入(如鼠标、键盘、触控)回传到服务器处理。UE的插件相对比较好用,但是就是环境下载总是失败。希望这篇文章对你有所帮助。

TxNet 1330

java学习——数据结构与算法——排序——1选择排序

文章目录选择排序1选择排序思路2、选择排序实现 选择排序 1选择排序思路 选择排序是一种简单直观的排序算法。其基本原理是: (1)经过第一次比较后得到最小的记录,然后将记录与第一个位置的记录进行交换; (2)接着对不包括第一个位置的其他记录进行第二轮比较,得到最小的记录并与第二个位置的记录交换; (3)重复这个过程,直到进行比较的记录只有一个为止。 2、选择排序实现 public class ...

weixin_42924812的博客 146

算法系统学习-1排序-选择排序

选择排序: 从开始处依次变量每个元素  每次遍历将元素依次与后面元素比较 时间复杂度:O(n2) Eg: 对于一个int数组,请编写一个选择排序算法,对数组元素排序。 给定一个int数组A及数组的大小n,请返回排序后的数组。 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] 1234567891011121314151617181920

JohnWang的专栏 339

算法学习-1-选择排序

选择排序代码:def findSmallest(arr): smallest = arr[0] smallest_index = 0 for i in range(1,len(arr)): if arr[i] &lt; smallest: smallest = arr[i] smallest_index = i return smallest_index def sel...

霜月孤鸟&RTEMS&TinyOS 579

算法学习算法》2.1选择排序

工作原理: 首先找到数组中最小的元素,将他和数组的第一个元素交换位置(如果最小是自己就和自己交换)。在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,知道将整个数组排序,这种方法叫做选择排序,因为他一直在选择剩余元素之中的最小者。 根据描述,我们知道,已经排序好的元素位于数组的左侧,每次只是交换位于右边的剩余元素。 代码实现: public class SortMa...

jiye111的博客 252

关于排序算法学习与总结1---冒泡、选择、插入、希尔排序

排序算法(SortAlgorithm)也称排序排序是将一组数据,依指定的顺序进行排列的过程1)内部排序: 指将需要处理的所有数据都加载到内部存储器(内存)中进行排序:2)外部排序法:数据量过大,无法全部加载到内存中,需要借助外部存储(文件等)进行排序平均时间复杂度是指所有可能的输入实例均以等概率出现的情况下,该算法的运行时间。最坏情况下的时间复杂度称最坏时间复杂度。一般讨论的时间复杂度均是最坏情况下的时间复杂度。

MMMMMyyyyffff的博客 791

排序算法学习1)(直接插入排序,希尔排序选择排序,堆排序,冒泡排序

文章目录直接插入排序代码实现复杂度的计算希尔排序希尔排序的预排序代码实现选择排序代码实现堆排序冒泡排序代码实现 ???? 注:以下排序都是以排升序为例。 直接插入排序 直接插入排序的主要思路就是: 1.首先默认第一个元素是有序的。 2.然后将其下一个元素作为待排序的元素,插入到前面有序序列的相应位置。至于插入的过程,如果遇到比待排序大的元素,则这个元素后移,直到遇到比其小的元素,然后将待插入元素放入其前一个位置。 代码实现 void Insertsort(int *a, int sz) { i

IamGreeHand的博客 1447

算法学习小记-1.排序算法-1.2选择排序

var arr = [8, 34, 67, 45, 5, 68, 2, 40, 4, 13, 60]; // arr = [5, 1, 1, 2, 0, 3]; sort(arr); function sort(arr) { var min; var i = 0 while (i < arr.length-1) { min = arr[i]; ...

onlyjin的博客 160

前端算法学习#1.介绍冒泡排序选择排序,冒泡排序如何优化

冒泡排序 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二...

weixin_30800807的博客 655

学习挑战赛】经典算法之直接选择排序_直接排序算法流程图(1)

📃推荐一款模拟面试、刷题神器👉🔥前言书接上文,今天带来直接选择排序算法的解析过程,从概念到实现一步一个脚印的完成。天气那么热,快来点简单算法解解渴!

2401_84170623的博客 475

1算法学习_线性查找、选择排序、插入排序及优化方案

1. 什么是算法 算法:一系列解决问题的,清晰,可执行的计算机指令 有限性 :在一定的时间执行完成 确定性:不会产生二义性 可行性;这个算法是可以的 输入 输出 举例:比如一道菜,如何做这道菜,做这道菜的过程就是算法 2. 线性查找法 举例:如何在一堆试卷中,找到自己的试卷 /** * @ClassName LinearSearch * @description: 线性查找法 * @author: qsong * @create: 2021-01-27 15:19 * @Version 1.

小布のJava世界 170

排序算法学习笔记1(冒泡、选择、插入 C++)

排序算法学习笔记1(冒泡、选择、计数) 学习笔记来源于:学习博客链接 一、冒泡排序 两两比较法,升序则大的换到后面,降序就把小的换到后面,代码实现简单,原理易懂,但时间复杂度为O(n^2) #include <iostream> using namespace std; template<typename T> //整数或浮点数皆可使用,若要使用类(class)或结构体(struct)时必须重载大于(>)运算符 void bubble_sort(T arr[], int len

yrr999的博客 174

算法学习之旅,中级篇(1-选择排序

介绍 在要排序的一组数中,选出最小的,或者最大的一个数与第一个位置的数交换,然后在剩下的数当中再找最小,或者最大的与第二个位置的数交换。 以此类推。。。 直到第n-1个元素和第n个元素比较为止。 分析 第一躺:从n个数中找出最小的数与第一个数交换位置。 第二趟:从第二个数开始的n-1个数找到最小的数与第二个数交换位置。 以此类推。。。 第i躺:从第i个数开始到n-i+1个数中选出最小

Archar_Saber的博客 317

算法入门学习----1.2选择排序

一、选择排序的原理  一个数组a[]有N个元素:    第一次从第一个数(arr[0])到最后一个数(arr[n-1])根据遍历,找出最小的数,然后和第一个数(arr[0])交换位置(比较n-1次);    第二次从第二个数(arr[1])到最后一个数(arr[n-1])根据遍历,找出最小的数,然后和第二个数(arr[1])交换位置(比较n-2次);  第三次从第三个数(arr

kunfd的博客 212

算法导论》学习笔记之一 排序算法1 (插入排序选择排序、归并排序)实现代码C++

最近在看《算法导论》第三版的书,相信很多同学都看过这本神作。 针对前几章书中出现的排序算法,我个人参照书中的 伪代码 拿 C++代码 重新实现 -------有写的不好的地方,请各位同学见谅-------------------------------------------------------- 源代码: 注意:这里我们是对一个未排序的数组进行操作,该数组为 : int A[1

Y_winter_w的专栏 853

排序选择排序

选择排序每一轮只进行一次交换。冒泡排序为[1,i-1];冒泡排序每一次都进行交换。选择排序为[1,i];

cssdhfks的博客 373

排序算法2:选择排序

什么是选择排序1.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。2.再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。3.重复第二步,直到所有元素均排序完毕。

baidu_35527775的博客 855

排序算法选择排序

排序算法选择排序

似霰的博客 692

数据结构与算法——选择排序

选择排序算法的实现思路与插入排序类似,也将数据分为已排序区间和未排序区间两部分。但选择排序每次会从未排序的区间中找到最小的元素,将其放到已排序区间的末尾。// 选择排序,arr表示数组,n表示数组大小 public static void selectionSort(int [ ] arr , int n) {i < n - 1;++ i) {// 查找最小值 int minIndex = i;j < n;++ j) {} } // 交换 int tmp = arr [ i ];

技术知识分享 139

数据结构笔记-简单排序算法-选择排序

简单排序算法,最简单的排序算法,一般也都是学习C语言中第一个接触的算法

qq_55059421的博客 467

虹软美妆秀v2.0.0.118虚拟化妆体验软件中文官方安装版

轻点鼠标,轻松打造明星妆容,轻松打造复古烈焰红唇妆。 虹软美妆秀(虚拟照片化妆软件)是虹软公司( arcsoft )推出的一款实用、简便、功能强大的虚拟化妆体验软件。 旨在为用户提供一种新颖的化妆体验,让用户不用试妆就能发现适合自己的妆容,也能轻松美化自己的素颜照片。 软件应用了虹软公司多项领先的图像识别技术,无论单人照片还是多人合影,都能精准迅速地识别人物脸部五官,一键点击即可完成妆容塑造。 虹

1998-2021年中国各省、市、区、县PM2.5平均浓度

1、数据源名称:中国各省、市、区、县PM2.5平均浓度2、时间范围:1998-2021年3、数据来源:https://sites.wustl.edu/acag/datasets/surface-pm2-5/4、主要指标: PM2.5是指大气中空气动力学当量直径小于或等于2.5微米的颗粒物,也称为可入肺颗粒物(暂无标准中文名)。虽然PM2.5只是地球大气成分中含量很少的组分,但它对空气质量和能见度等有重要的影响。PM2.5粒径小,富含大量的有毒、有害物质且在大气中的停留时间长、输送距离远,因而对人体健康和大气环境质量的影响更大。共计12个指标:省、省代码、市、市代码、县代码、县、年份、均值、总和、最小值、最大值、标准差

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值