简单排序算法:简单选择排序(选择排序)

排序算法-选择排序 简单选择排序(Simple Selection Sort)就是通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1  时间复杂度:      1) 最好情况:本身有序,需要比较n-1次 时间复杂度为o(n)      2)最坏情况:逆序情况,需要比较(n-1)+(n-2)+...+2+1=n(n-1)/2 时间复杂度为o(n²) 性能上略优于冒泡排序 减少了交换 阅读详情

简单选择排序法:通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=n》)个记录交换。

import java.util.Arrays;

public class Solution {
    public static void main(String[] args) {
        Solution s = new Solution();
        int[] arr = {4,5,1,6,2,7,3,8,8,4};
        s.SelectSort(arr);
        System.out.println(Arrays.toString(arr));    //输出:[1, 2, 3, 4, 4, 5, 6, 7, 8, 8]
    }

    private void SelectSort(int[] arr)
    {
        for (int i = 0; i < arr.length - 1; i++)
        {
            int min = i;
            for (int j = i + 1; j < arr.length; j++)
            {
                if (arr[j] < arr[min])
                    min = j;
            }
            if (i != min)
                swap(arr, i, min);
        }
    }
    private void swap(int[] arr, int i, int j)
    {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}


简单选择排序复杂度分析:

特点:交换移动数据次数少

比较次数:无论最好最差的情况,比较次数都是一样多,第i次排序需要进行n-i次关键字的比较,此时需要比较n-1 + n-2 +... + 1 = n(n-1)/2次

交换次数:最好情况下,交换0次;最坏情况下,初始降序时,交换n-1次。

最终的排序时间是比较和交换的次数总和,总的时间复杂度为O(n^2)。

尽管与冒泡同为O(n^2),但是简单选择排序的性能略优于冒泡排序。


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

相关推荐

地震勘探原理---地震预处理

3.1 为什么说要对数据进行振幅补偿?具体来说,地震波在传播过程中会遇到各种各样的地质条件,例如不同的岩层、土壤、水层等,这些介质的密度、速度等特性不同,因而对地震波的能量消耗也有所不同。在传播距离较远的情况下,能量损失可能会导致接收到的地震信号振幅变小。相反,在传播距离较近的情况下,能量损失可能较小,导致接收到的地震信号振幅变大。如果不对数据进行振幅补偿,这种振幅不均衡会导致地震数据分析和解释的误差和不确定性增加,可能产生错误的结论。

DARRENANJIAN的博客 3274

【C语言学习笔记】:简单选择排序

最终得到(0,1,2,3,6,5,4,9,8,7),其中(0,1,2)已经有序。最终得到(0,1,3,2,6,5,4,9,8,7),其中(0,1)已经有序。第二趟子排序:整个记录序列中(0,3,1,2,6,5,4,9,8,7)的数据(0)已经有序,只需针对子数据记录序列(3,1,2,6,5,4,9,8,7)。第三趟子排序:整个记录序列中(0,1,3,2,6,5,4,9,8,7)的数据(0,1)已经有序,只需针对子数据记录序列(3,2,6,5,4,9,8,7)。

Jiangziyadizi的博客 293

ABAP HANA BP主数据批导

SAPhana官方推荐的创建bp主数据的类是CL_MD_BP_MAINTAIN 客户的创建具体示例代码如下: DATA: LT_RETURN_MAP TYPE MDG_BS_BP_MSGMAP_T. DATA: LS_RETURN_MAP TYPE MDG_BS_BP_MSGMAP. DATA: LS_MESSAGE_MAP TYPE MDG_BS_BP_MSGMAP_KEY. DATA: LT_DATA TYPE CVIS_EI_EXTERN_.

IamRunjiang的博客 4143

直接选择排序

基本概念算法思想:第一趟从n个元素的数据序列中选出关键字最小/大的元素并放在最前/后位置,下一趟从n-1个元素中选出最小/大的元素并放在最前/后位置。以此类推,经过n-1趟完成排序。时间复杂度选择排序的交换操作介于 0 和 (n - 1) 次之间。选择排序的比较操作为 n (n - 1) / 2 次之间。选择排序的赋值操作介于 0 和 3 (n - 1) 次之间。比较次数O(n^2),比较次数与关...

J~的博客 678

VIO实战前传:手把手教你解读Kalibr双目IMU标定报告与参数应用

本文详细解析Kalibr双目IMU联合标定报告的核心参数与应用方法,涵盖重投影误差分析、IMU误差指标解读、关键变换矩阵原理及VINS-Fusion实战配置。通过手把手教学帮助开发者准确理解标定结果,解决VIO算法落地中的参数配置难题,提升视觉惯性里程计的系统稳定性与精度。

weixin_42699679的博客 331

PyCharm安装PyQt5及工具(Qt Designer、PyUIC、PyRcc)详细教程来了

Qt是常用的用户界面设计工具,而在Python中则使用PyQt这一工具包,它是Python编程语言和Qt库的成功融合。这篇博文通过图文详细介绍在PyCharm中如何完整优雅地安装配置PyQt5的所有工具包,主要内容包括PyQt5、PyQt5-tools的依赖包安装和Qt Designer、PyUIC、PyRcc三个工具的设置。最后简单演示了PyQt5的调用方式及三个工具的使用方法。

Python966的博客 3万+

七大排序算法之简单算法系列(二)——简单选择排序

简单选择排序(Simple Selection Sort)原理: 通过n-1次关键字之间的比较,从n-i+1个记录中找到关键字最小的记录,并和第i个记录交换。 在冒泡排序中,我们每次都做了交换,而这里我们不需要每次都进行交换,而是把最小的数和第i个记录交换。 直接看代码进行理解。 简单选择排序的代码实现: #include &lt;iostream&gt; using namespa...

满城丶琉璃月 501

避坑指南:ESP32S3驱动INMP441麦克风时的常见硬件冲突与解决方案

本文详细解析了ESP32S3驱动INMP441麦克风时常见的硬件冲突问题,包括GPIO资源冲突、电源噪声、I2S时钟同步等,并提供了实用的解决方案和优化策略。通过实测数据和代码示例,帮助开发者快速排查和解决音频设备开发中的疑难问题,提升系统稳定性和音频质量。

embedding5hiker的博客 943

选择排序—简单选择排序(Simple Selection Sort)

选择排序—简单选择排序(Simple Selection Sort) 基本思想 排序流程 算法实现 简单选择排序 改进二元选择排序 算法分析

wgiyq的博客 2040

部署模型:Libtorch使用笔记【Pytorch的C++版本】【把用Pytorch训练好的模型打包保存为.pt格式,使用Libtorch去加载.pt格式模型,在C++工程中去用就好了】

A : Libtorch是pytorch的C++版本,现在的很多大型项目都是用C++写的,想使用训练好的模型,需要通过caffe等方式去集成,比较麻烦。这里pytorch官方提出了Libtorch,我们就可以把pytorch训练好的模型,打包起来,直接在C++工程中去用就好了,相比较caffe等,非常方便!虽然对于许多需要动态性和易迭代性的场景来说,Python是一种合适且首选的语言,但在同样的情况下,Python的这些特性恰恰是不利的。生产环境是一个需要低延迟和有严格部署要求的领域,一般选择C++。

u013250861的博客 2949

记录Android Studio连接华为(nova)手机鸿蒙系统踩过的坑

鸿蒙系统的华为老机子比较麻烦,坑有点多,兄弟们加油!

沉迷单车的追风少年 7922

简单选择排序流程图_图解排序算法:3种简单排序(选择、冒泡、直接插入)

来自:dreamcatcher-cx链接:cnblogs.com/chengxiao/p/6103002.html00 前言排序是数据处理中十分常见且核心的操作,虽说实际项目开发中很小几率会需要我们手动实现,毕竟每种语言的类库中都有n多种关于排序算法的实现。但是了解这些精妙的思想对我们还是大有裨益的。本文简单温习下最基础的三类算法:选择、冒泡、插入。先定义个交换数组元素的函数,供排...

weixin_42644410的博客 7034

ArcGIS:景观指数和景观单元关联生成景观指数遥感图像

优快云@_养乐多_本文将记录,使用由 Fragstats V4.2 软件计算的景观指数和瓦片 tif 数据生成景观指数图像的操作步骤。本教程的操作均在ArcGIS上进行,最后生成一个研究区内指定景观单元大小的景观指数图像。结果如下所示,

养乐多的博客 4931

对以下6种常用的内部排序算法进行比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。

题目要求: (1)对以下6种常用的内部排序算法进行比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。 (2)待排序表的表长不小于100;其中的数据要用伪随机数产生程序产生;至少要用5组不同的输入数据作比较;比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换计为3次移动)。 (3)最后要对结果作出简单分析,包括对各组数据得出结果波动大小的解释。 (4)希尔排序:先将整个待排记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次

qq_43541242的博客 4265

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

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

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Java 排序算法: 选择排序 (简单选择排序+堆排序)

文章目录五大类内部排序算法简单选择排序: SelectSort算法思路实现简单选择排序 测试80000个随机数据的排序效率堆排序: HeapSort算法思路:实现:堆选择排序 测试八百万个随机数据的排序效率 (还是快排更胜一筹) 五大类内部排序算法 插入排序 交换排序 选择排序 简单选择排序 堆排序 归并排序 基数排序 简单选择排序: SelectSort 算法思路 选择排序一共有[数组大小-1]轮排序 每一轮排序, 又是一个循环, 循环的规约如下 先设定当前的这个数是最小值 与后面的数据

Beyond_Nothing 509

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

简单排序算法总结:冒泡排序、选择排序与插入排序

算法平均时间复杂度最好情况最坏情况空间复杂度稳定性主要特点冒泡排序O(n²)O(n) (优化后)O(n²)O(1)稳定思想简单,效率低,可通过标志位优化选择排序O(n²)O(n²)O(n²)O(1)不稳定交换次数少(最多 n-1 次),但比较次数固定插入排序O(n²)O(n)O(n²)O(1)稳定对小规模或基本有序数据高效,适合增量排序冒泡排序、选择排序和插入排序都是基于比较的简单排序算法,时间复杂度为 O(n²),不适合大规模数据排序。冒泡排序。

2603_95838138的博客 327

排序算法(1):简单选择排序

基本思想   简单选择排序是一种简单并且非常直观的排序算法。它的思想是每次从未排序序列中找到最小值,然后将其放到已排序序列的末尾,重复这一过程直到不存在未排序元素。 算法流程 以长度为 nnn 的数组为例: 第一趟排序:从第一个元素开始遍历整个数组,找出最小值,和第一个元素交换; 第二趟排序:找出第二个元素到第 nnn 个元素中的最小值,和第二个元素交换; 第三趟排序:找出第三个元素到...

Lucky_Go的博客 2246

排序算法之三种基本排序:直接插入排序、冒泡排序、简单选择排序

1、冒泡排序 时间复杂度:O(n^2) 基本思想:相邻的元素两两进行比较,反序则交换,这样每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序。 代码实现如下: public class BubbleSort { /** * 冒泡排序:时间复杂度O(n^2) * 思想:基本就是相邻的元素两两进行比较,反序则交换,这样每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序。 * @author lst ...

TT_130616的博客 1810

排序算法:直接插入排序,折半插入排序,冒泡排序,快速排序,简单选择排序

一、直接插入排序 基本操作是将一条记录插入到已排好序的有序表中,从而得到一个新的、记录数量增1的有序表。 算法步骤: ①设待排序的记录存放在数组r[1...n]中,r[1]是一个有序序列; ②循环n-1次,每次使用顺序查找法,查找r[i](i=2...n)在已排好序的序列r[1...i-1]中的插入位置,然后将r[i]插入表长为i-1的有序序列r[1...i-1],直到r[n]插入表长为n-1的有序序列r[1...n-1],最后得到一个表长为n的有序序列。 void insertsort(nod

xiaoyeren_ITRoad的博客 3026

三个简单排序算法:冒泡、简单选择、直接插入

第一个是冒泡,最简单,但是性能一般(以下是改进版的,在冒泡过程中加入了flag判断有没交换过) public class BubbleSort { public static void main(String[] args) { int i,j; ...

221

Java 简单选择排序算法,Java排序算法(2):简单选择排序

Java排序算法(二):简单选择排序[基本思想]在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数种再找出最小的与第二个位置的数交换,如此循环至倒数第二个数和最后一个数比较为止。算法关键:找到最小的那个数,并用变量记住它的下标。[java实现]public class SimpleSelectionSort {public static void main(String[] ...

weixin_28724661的博客 257

排序算法:简单选择排序

简单选择排序是一种选择排序。 选择排序:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。 简单排序处理流程 (1)从待排序序列中,找到关键字最小的元素; (2)如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换; (3)从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。 如图所示,每趟...

HelloWorld搬运工 973

排序算法:简单选择排序算法实现及分析

简单选择排序算法介绍简单选择排序(Simple Selection Sort)就是通过n-1次关键字排序之间的比较,从n-i+1个记录中选择关键字最小的记录,并和第i(1&lt;=i&lt;=n)记录交换。这是一般书上的定义。实际上选择排序,就是每一轮选者一个最值出来,然后在剩下的数据中又选择一个最值出来,直到数据被选择完毕。这就是所谓的简单选择排序算法。简单选择排序算法实现在下面代码中,每一轮内...

重庆李四 2018

选择排序:简单直观的排序算法

选择排序是一种简单直观的排序算法,掌握它不仅有助于理解排序的基本思想,也能帮助我们更好地学习其他排序算法。希望这篇文章对大家有所帮助,祝大家刷题愉快!本文由 cannonjinx 原创,转载请注明出处。

cannonjinx的博客 4100

常见的五类排序算法图解和实现(选择类:简单选择排序,锦标赛排序,树形选择排序,堆排序)

 常见的五类排序算法图解和实现(选择类:简单选择排序,锦标赛排序,树形选择排序,堆排序) 选择类的排序算法 简单选择排序算法 采用最简单的选择方式,从头到尾扫描待排序列,找一个最小的记录(递增排序),和第一个记录交换位置,再从剩下的记录中继续反复这个过程,直到全部有序。 具体过程: 首先通过 n –1 次关键字比较,从 n 个记录中找出关键字最小的记录,将它与第一个记录

jia1506的博客 1847

选择排序算法:简单但有效的排序方法

在计算机科学中,排序算法是基础且重要的主题之一。选择排序(Selection Sort)是其中一个简单但非常有用的排序算法。本文将详细介绍选择排序的原理和步骤,并提供Java语言的实现示例。

修己xj的博客 1656
上一篇: 简单排序算法:冒泡排序(交换排序)
下一篇: 改进排序算法:希尔排序(对直接插入排序的改进)
when_bounce
博客等级 码龄10年 20粉丝 238原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值