排序算法(二):选择排序详解

【算法与数据结构】之选择排序 1.直接选择排序 ①定义: 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。 ②时间复杂度、空间复杂度和稳定性 时间复杂度:平均情况O(n2),最坏情况O(n2) 空间平均情况:O(1) 稳定性:不稳定 ③代码 public class SelectionSort { public static void main(String[] arg 阅读详情

前言: 最近换工作,面试稍微大一点的厂都会被问到算法和数据结构这块知识,得空自己总结一下吧,总结不到位希望大佬指正哈。

情景记忆: 选择排序其实蛮好记的,看排序的名称就很容易联想,“选择”是这个排序的核心思想,那选择的时候是怎么选择的呢,其实要记住这个排序你就联想择优或者淘汰机制就很容易记住:择优是从一堆参差不齐的同种物品中选择最好的,比如有一对苹果,有大有小,我们择大而食;淘汰就是从一堆参差不齐的物品中淘汰最烂的,比如还是有一堆苹果,这次是腐烂程度不同的苹果或者快要腐烂,我们要从中选择腐烂程度最大的苹果丢弃。

逻辑实现: 以上的记忆方法是不是很贴近生活,这样就很容易记住了。逻辑其实也十分简单,一次选择一个最好的或最坏的出来,依次放入有序的队列中。

代码实现:
正向排序:

def select_sort(my_list):
    n = len(my_list)
    for j in range(n-1):
        min_index = j
        for i in range(j+1, n):
            if my_list[min_index] < my_list[i]:
                min_index = i
        my_list[j], my_list[min_index] = my_list[min_index], my_list[j]
        print("第%s趟:" % (j + 1), my_list)


if __name__ == '__main__':
    my_list = [7, 2, 0, 1, 5, 6, 8, 3, 9, 4]
    select_sort(my_list)


运行结果:
第1趟: [7, 2, 0, 1, 5, 6, 8, 3, 9, 4]
第2趟: [0, 7, 2, 1, 5, 6, 8, 3, 9, 4]
第3趟: [0, 1, 7, 2, 5, 6, 8, 3, 9, 4]
第4趟: [0, 1, 2, 7, 5, 6, 8, 3, 9, 4]
第5趟: [0, 1, 2, 3, 7, 6, 8, 5, 9, 4]
第6趟: [0, 1, 2, 3, 4, 7, 8, 6, 9, 5]
第7趟: [0, 1, 2, 3, 4, 5, 8, 7, 9, 6]
第8趟: [0, 1, 2, 3, 4, 5, 6, 8, 9, 7]
第9趟: [0, 1, 2, 3, 4, 5, 6, 7, 9, 8]
第10趟: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

逆向排序:

def select_sort(my_list):
    n = len(my_list)
    for j in range(n-1):
        min_index = j
        for i in range(j+1, n):
            if my_list[min_index] > my_list[i]:
                min_index = i
        my_list[j], my_list[min_index] = my_list[min_index], my_list[j]
        print("第%s趟:" % (j + 1), my_list)


if __name__ == '__main__':
    my_list = [7, 2, 0, 1, 5, 6, 8, 3, 9, 4]
    select_sort(my_list)
 
 
运行结果:
第1趟: [7, 2, 0, 1, 5, 6, 8, 3, 9, 4]
第2趟: [9, 2, 0, 1, 5, 6, 7, 3, 8, 4]
第3趟: [9, 8, 0, 1, 2, 5, 6, 3, 7, 4]
第4趟: [9, 8, 7, 0, 1, 2, 5, 3, 6, 4]
第5趟: [9, 8, 7, 6, 0, 1, 2, 3, 5, 4]
第6趟: [9, 8, 7, 6, 5, 0, 1, 2, 3, 4]
第7趟: [9, 8, 7, 6, 5, 4, 0, 1, 2, 3]
第8趟: [9, 8, 7, 6, 5, 4, 3, 0, 1, 2]
第9趟: [9, 8, 7, 6, 5, 4, 3, 2, 0, 1]
第10趟: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

选择排序总结:
没有最好的算法只有最合适的算法,一个算法的好坏,与运用的场景通常是于算法的时间复杂度、空间复杂度和稳定性相关的。

时间复杂度:时间复杂度的衡量标准是每次比较和交换位置所花的时间综合,也就是完成排序所花的时间总和称为时间复杂度;计算标准是一次循环(不论循环几次)我们记为n,如果能够差分为二叉树结构的我们记为log n,那么选择排序的时间复杂度我们可用看出是O(n^2)

空间复杂度:空间复杂度的衡量标准是在完成排序的整个过程中是否有申请新的存储空间来完成排序,如果有,且申请的空间越多那么我们则认为该算法的空间复杂度约复杂,那么冒泡排序在过程中没有申请存储空间,所有我们认为选择排序的空间复杂度小(除了自己本身)

稳定性:即在原序列中,list[i]=list[j],且list[i]在list[j]之前,而在排序后的序列中,list[i]仍在list[j]之前,则称这种排序算法是稳定的,否则称为不稳定的,那么我们认为冒泡排序是稳定的,稳定性比较:堆排序、快速排序、希尔排序、选择排序是不稳定的排序算法,而冒泡排序、插入排序、归并排序是稳定的排序算法。

数据结构与算法(二)排序算法详解及实现:选择排序、插入排序、希尔排序、归并排序、快速排序和堆排序 一、测试模板类 在学习排序算法的过程中,初步写了一个测试用的模板类,类的方法中包括排序的算法(待实现),类中目前只实现了小于比较和交换等基础的功能,源代码如下,后续会根据排序算法的不同,实现在模板类的排序方法里。 //sort1.h #pragma once #include <iostream> template<class T> class arrSort { public: arrSort(T* arr1, int length, bool isSorted = false) 阅读详情

相关推荐

算法之Java初级排序算法:选择排序与插入排序详解

在编程的学习旅程中,算法是提升编程能力的关键所在。今天,咱们一同深入研究Java中的初级排序算法——选择排序和插入排序,希望能和大家共同进步,让我们在算法的世界里探索得更深更远!

wj_rdk的博客 1398

C语言实现选择排序

#include “sort_.h” void print_array(int *arr, int n) // 打印数组 { if(n==0){ printf(“ERROR: Array length is ZERO\n”); return; } printf("%d", arr[0]); for (int i=1; i<n; i++) { printf(" %d", arr[i]); } printf("\n"); } void sort_array(int *arr, int n) // 编程实

helpluozhao123的博客 785

用AI+Playwright实现零代码UI自动化测试:以登录页面为例的实战指南

本文详细介绍了如何利用AI与Playwright结合实现零代码UI自动化测试,特别以登录页面为例进行实战演示。通过自然语言描述生成测试脚本,大幅降低技术门槛,提升测试效率,并支持跨浏览器验证。适合非技术人员快速上手专业级自动化测试。

weixin_28842269的博客 403

【十大排序算法】----选择排序(详细图解分析+实现,小白一看就会)

在选择排序中,我们是可以将其优化的,即可以一趟选出两个值,一个最大值一个最小值,然后将其放在序列开头和末尾,这样可以使选择排序的效率快一倍。的原理:通过遍历数组,选出该数组中较大的或者较小的,放在数组的起始位置,当遍历完整个数组时排序完成。选择排序是最简单的排序之一,最大的优点就是好理解,不过因为其效率低下,所以在一般情况下不使用。:当一个数已经知道其是 最大/最小 ,并已经将其进行交换之后,那么这个位置是万万不可变动的。当经过 N-1 趟的遍历交换之后,该序列就实现的从小到大的排列了。

2302_78684687的博客 1万+

【机器学习】图神经网络(NRI)模型原理和运动轨迹预测代码实现

NRI模型利用VAE和GNN从观测数据中学习系统动态和交互图,展现出在无监督学习、图结构建模、多步预测和连续松弛方面的强大能力。未来工作可探索动态图结构学习、应用于更复杂系统、提高模型泛化能力和计算效率,以及与其他模型的结合。NRI作为新兴的图神经网络方法,在理解和预测相互作用系统方面潜力巨大,有望在各领域发挥重要作用。

MUKAMO的博客 2779

PSO算法介绍

结合网上的文章对PSO进行一些介绍,并附上自己复现的算法。

Witty_Hou的博客 1万+

头歌作业之排序1、2、3、4

为了完成本关任务,你需要掌握:链表的相关操作和掌握选择排序算法。为了完成本关任务,你需要掌握:直接插入排序的算法思想。为了完成本关任务,你需要掌握:折半插入排序算法。本关任务:编写一个能实现希尔排序算法的函数。本关任务:编写一个能实现希尔排序算法的函数。本关任务:编写一个能实现希尔排序算法的函数。本关任务:编写一个能实现希尔排序算法的函数。本关任务:编写一个能实现希尔排序算法的函数。本关任务:编写一个能实现希尔排序算法的函数。本关任务:编写函数实现折半插入排序算法。3 9 5 8 7 (数字序列)

weixin_62075168的博客 1万+

STM32G474片内运放实战:从独立模式到PGA与ADC采样链路

在嵌入式控制系统中,运放是连接模拟信号与数字处理的关键环节。传统方案依赖外部分立运放搭建放大电路,存在成本高、PCB布局敏感、一致性差等痛点。STM32G474在MCU内部集成多路可编程运放(OPAMP),支持独立模式、跟随器、PGA以及比较器模式,配合内部ADC和DMA可构成完整模拟采集链路。通过片内互联,信号路径大幅缩短,抗干扰性和通道一致性显著提升,尤其适用于电机电流采样、数字电源等场景。本文以STM32G474为例,详解从独立模式到PGA增益配置,再到ADC与DMA联动调试的完整过程,并给出采样时间

weixin_29194255的博客 247

选择排序详解(Selection sort)

1、第一次排序:用第一个元素和后面的元素进行对比,2和8对比,8比2大继续向后对比,然后2和1对比,1比2小,拿1继续向后比。用第二个元素8和后面的元素进行对比,8和2对比,2比8小,拿2和后面的元素进行对比。选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小元素,然后放到已排序的序列的。

Wzill 1万+

光伏系统选型指南:5种主流MPPT算法优缺点对比(附选型流程图)

本文深入剖析了光伏系统中五种主流MPPT算法的核心原理与性能差异。通过对比扰动观察法、电导增量法、恒定电压法、模糊逻辑控制及人工智能算法在追踪精度、响应速度、实现成本与稳定性等方面的表现,为不同应用场景(如户用、工商业及大型电站)提供了清晰的选型决策流程图和实战指南,帮助工程师优化系统效率与投资回报。

weixin_29294597的博客 106

OpenWrt国内镜像源一键切换脚本:清华/阿里/中科大源全搞定

本文介绍了OpenWrt国内镜像源一键切换脚本,支持清华、阿里和中科大三大源,自动识别设备架构和系统版本,显著提升软件包安装速度和成功率。脚本包含架构自动识别、版本适配、多源选择和配置备份等功能,适用于x86_64、ramips/mt7621等常见架构,帮助用户解决海外源访问缓慢的问题。

g5h6i的博客 1177

详解十大经典排序算法(二):选择排序(Selection Sort)

这样可以减少不必要的交换操作,提高排序的效率。同时,由于每一趟遍历中的交换操作次数减少,也减少了数据的移动次数,进一步提高了排序的效率。选择排序的基本思想是通过不断选择剩余元素中的最小(或最大)元素,将其放置到已排序序列的末尾,从而逐步构建有序序列。选择排序是一种简单的排序算法,它每次从待排序的元素中选择最小(或最大)的元素,将其放到已排序序列的末尾,直到整个序列排序完成。:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。

WriteBug001的博客 1421

基于STM32+华为云IOT设计的云平台监控系统_102

本次设计结合现代生活的具体需求,设计出一套基于华为云IOT设计的云平台监控系统,可以远程实时查看家里光照强度、温湿度等信息,支持在云端控制家里的电器设备,实现远程控制。

7645

十大经典排序算法-选择排序算法详解

一、什么是选择排序 1.概念 选择排序(Selection sort)是最简单直观的一种算法,基本思想为每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止 2.算法原理 这是一个无序数列:1、5、4、2、6、3,我们要将它按从小到大排序。按照选择排序的思想,我们要找到最小的元素,将它移到队首 首先开始第一轮最小元素的比较 先假定最小元素为第一个元素:1 第一步:比较1和5,1比5小,最小元素为1 第二步:比较1和4,1比4小,最小元素为1 经过一轮比较后,找到1为最小的

qq_35344198的博客 1万+

2023华为od机试C卷【启动多任务排序】C++ 实现

一个应用启动时,会有多个初始化任务需要执行,并且任务之间有依赖关系,例如A任务依赖B任务,那么必须在B任务执行完成之后,才能开始执行A任务。现在给出多条任务依赖关系的规则,请输入任务的顺序执行序列,规则采用贪婪策略,即一个任务如果没有依赖的任务,则立刻开始执行,如果同时有多个任务要执行,则根据任务名称字母顺序排序。

MISAYAONE的博客 888

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

C语言排序算法之选择排序

文章目录一、选择排序的概述二、选择排序算法代码详解(1)算法分析(2)选择排序算法代码详解三、总代码 一、选择排序的概述 选择排序(Selection sort)是一种简单直观的排序算法。 它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。 二、选择排序算法代码详解 (1)算法分析     &nbsp

weixin_52785320的博客 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【排序算法】选择排序、堆排序

堆排序是一种基于堆(Heap)数据结构的排序算法。最大堆:每个节点的值都大于或等于其子节点的值。根节点是最大值。最小堆:每个节点的值都小于或等于其子节点的值。根节点是最小值。首先将无序数组构建为一个最大堆。然后,将堆顶(即最大值)与数组的最后一个元素交换,缩小堆的范围,对剩下的元素继续调整成最大堆,直到排序完成。

2301_76677973的博客 2940

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

排序算法:选择排序算法

在本文中,我们深入研究选择排序的机制,解释其对各种类型列表进行排序的过程和有效性。这是因为我们使用了固定数量的变量,除了循环变量和辅助变量(包括 temp、size 和 minIndex)之外,我们不需要任何额外的内存空间。我们重复上述步骤,直到得到一个已排序的列表,并且未排序的子列表中不再有任何元素。每次迭代后,已排序子列表的大小都会增加,而未排序子列表的大小会减少。在第 1 部分中,交换发生的次数将等于 n,并且每次交换将花费常数时间。最初,已排序的子列表是空的,我们只有未排序的子列表。

新华编程特战队 3015

【排序算法】——选择排序

排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列。所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。

2302_80243065的博客 3309

排序算法之基础排序:冒泡,选择,插入排序详解

冒泡排序、选择排序和插入排序作为基础排序算法,虽然在效率上不及一些高级排序算法,但它们原理简单、易于理解,是学习排序算法的入门之选,也是理解更复杂排序算法的基础。本文我将详细介绍这三种基础排序算法的原理、实现代码、性能分析以及实际应用场景。

1546

排序算法(二):选择排序

选择排序是一种简单、易理解的排序算法,适合用于学习排序的基本思想。尽管它的时间复杂度较高,适用于小规模数据排序,但在实际应用中,可以根据不同场景选择更高效的排序算法,如快速排序或归并排序。通过本文的分析和代码示例,希望大家能够深入理解选择排序的工作原理,能够在需要的场合灵活运用它,并为进一步学习其他排序算法打下坚实的基础。选择排序虽然简单,但它依然是计算机科学中不可忽视的经典算法之一。希望你在学习排序算法的过程中,能够通过这篇文章掌握选择排序的精髓。

一碗黄焖鸡三碗米饭的博客 1090

排序算法(二)—— 选择法排序算法

1、选择法排序简介 选择法排序算法是一种常用的排序算法,他的实现方法是遍历数组所有元素,找出最小的元素,将它与第一个元素交换;然后遍历剩下的元素,找出最小的元素并与第二个元素交换;接下来再遍历剩下的元素,找出最小的元素并与第三个元素交换;如此反复,知道数组末尾。 比如一个5个元素的数组5、3、1、2、4,使用选择法进行排序,排序步骤如下所示。 2、选择法代...

bigmarshal的博客 5127

【排序算法】选择排序

选择排序

SWsunlight的博客 2626

选择排序算法

  选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。   选择排序就是从当前未排序的整数中找一个最小的整数,将它放在已排序的整数列表的最后。   要点: 比较相邻的两个数,如果左边的数大于右边的数,就进行交换。   例如: 将数组 { 4,2,8,0

大彤小忆的博客 9074

【十大排序算法】(三)选择排序算法

一、基本思想 选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 二、算法分析 1、算法描述 n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。具体算法描述如下: 初始状态:无序区为...

riemann_的博客 1745

排序算法图解(二):选择排序

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。本文被Java数据结构专栏收录, 持续更新中。

黄小黄的博客 1768
上一篇: 排序算法(一):冒泡排序详解
下一篇: python处理时间的工具
一只快死的猿
博客等级 码龄7年 6229粉丝 52原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值