首页 > 编程语言 >排序算法——选择排序法

排序算法——选择排序法

时间:2024-07-13 11:57:34浏览次数:18  
标签:遍历 元素 选择 算法 print 排序 data

选择排序算法概述

选择排序(Selection Sort)是一种简单直观的排序算法。它的基本思想是:在要排序的一组数中,选出最小(或最大)的一个数与第一个位置的数交换;然后在剩下的数当中再找最小(或最大)的与第二个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。所有过程都是从前向后依次找到最小(或最大)元素,而交换是跳跃式的。

选择排序算法步骤

**初始化:**在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置。
**查找与交换:**再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。
**重复:**重复第二步,直到所有元素均排序完毕。

算法特点

**稳定性:**选择排序是不稳定的排序方法(意味着两个相等的数可能在排序后的序列中改变它们的相对位置)。
**时间复杂度:**选择排序的时间复杂度为O(n^2)。
**空间复杂度:**选择排序是原地排序,只需要用到O(1)的额外空间(仅用于几个变量,如minIndex)。
**适用性:**尽管选择排序在效率上不是最优的,但它实现简单,对于小规模数据或基本有序的数据效率尚可。

算法代码例子:为五名学生的期末考试成绩排序

def choose(data):             #自定义一个选择排序法函数
    for i in range(4):        #遍历新数据
        for j in range(i+1,5):#遍历新数据
            if data[j]>data[i]:                 #如果数据大于原来的数据
                data[i],data[j]=data[j],data[i]#需要交换位置
        print('第 %d 次排序之后的结果是'%(i+1),end='')#提示
        for j in range(5):                      #遍历每次排序的结果
            print('%6d'%data[j],end='')        #输出结果
        print()                                  #输出空行


data=[420,434,421,539,555]                    #创建数列并初始化
print("各个学生成绩如下:")                     #提示
for i in range(5):                             #遍历原有数据
    print('%6d'%data[i],end='')               #输出结果
print('\n---------------------------')       #输出分界符
choose(data)                                   #调用选择排序法函数
print('\n---------------------------')       #输出分界符
print("从高到低排名之后的成绩如下:")           #提示
for i in range(5):                             #遍历排序好的新数列的数据
    print('%6d'%data[i],end='')               #输出结果
print('')                                       #输出空行

运行结果:

在这里插入图片描述

代码解析

choose 函数实现了选择排序算法,排序逻辑是按照从大到小的顺序进行排序的。

算法步骤

外层循环: 从第一个元素开始,直到倒数第二个元素(因为最后一个元素自然处于排序状态)。i 表示当前正在比较的元素的位置。
内层循环: 从 i+1 开始到最后一个元素,即遍历未排序的部分。比较当前元素 data[i] 与 data[j](其中 j 从 i+1 到最后一个元素的索引)。
比较与交换: 如果 data[j] 大于 data[i],则交换这两个元素的位置。这样,data[i] 左侧(包括 data[i])的元素就都是当前遍历过的元素中最大的。
输出当前状态: 每完成一轮排序(即内层循环完成一次),就输出当前数组的状态,以便观察排序过程。
重复: 继续外层循环,直到整个数组排序完成。

注意

  • 这段代码中的排序是从大到小的,因为比较条件if data[j] > data[i]
  • 排序过程中,数组是原地排序,即不需要额外的存储空间来存储排序结果
  • 输出部分帮助理解排序的逐步过程,但在实际应用中可能不需要。

结论

  • 选择排序虽然效率不是最高,但由于其实现简单,因此在某些情况下仍然很有用。
  • 然而,在处理大数据集时,更高效的排序算法(如快速排序、归并排序等)通常是更好的选择。

标签:遍历,元素,选择,算法,print,排序,data
From: https://blog.csdn.net/weixin_64534587/article/details/140397459

相关文章

  • 12-开发中如何选择集合实现类
    12--开发中如何选择集合实现类开发中,选择什么集合实现类,主要取决于业务操作特点,然后根据集合实现类特性进行选择,分析如下:先判断存储的类型(一组对象或一组键值对)一组对象:Collection接口允许重复:List接口增删多:LinkedList【底层维护了一个双向链表】改查多:ArrayList【底......
  • 「代码随想录算法训练营」第十天 | 栈与队列 part2
    150.逆波兰表达式求值题目链接:https://leetcode.cn/problems/evaluate-reverse-polish-notation/题目难度:中等文章讲解:https://programmercarl.com/0150.逆波兰表达式求值.html视频讲解:https://www.bilibili.com/video/BV1kd4y1o7on题目状态:多次修改bug后通过个人思路:......
  • 机器学习算法-决策树
    一、决策树简介    决策树是一种分类与回归的方法,它以树形结构的形式进行呈现,可以认为是if-then规则的集合,也可以认为是特征空间与类空间上的条件概率分布。二、如何理解决策树?    我们大部分人都有过租房子的经历,那你是怎么决定要租一个房子的呢?我们一般判......
  • 【算法】求 x 的 n 次方
    1.概述题目链接牛客网题目描述给定一个double类型的浮点数x和int类型的整数n,求x的n次方。1.1解题思路最直观的解法是将x重复乘n次,x\*x\*x...\*x,那么时间复杂度为O(N)。因为乘法是可交换的,所以可以将上述操作拆开成两半(x\*x..\*x)\*(x\*x..\*x),两......
  • 基于ACO蚁群优化算法的WSN网络路由优化matlab仿真
    1.程序功能描述      基于ACO蚁群优化算法的WSN网络路由优化,通过蚁群优化迭代,在WSN中搜索一个最短的路由路径。在仿真过程中,实时显示每一次迭代过程中找到的路径,最后输出ACO的优化迭代过程,网络路由路径的搜索结果。 2.测试软件版本以及运行结果展示MATLAB2022a版本运......
  • 沁园春 · 算法
    OI风光,千里DP,万里背包。望深搜内外,唯余莽莽;广搜上下,顿失滔滔。山舞图论,原驰蜡象,欲与AC试比高。惜指针链表,略输文采;滚动数组,稍逊风骚;一代天骄,Vector数组,只识弯弓射大雕。俱往矣,数风流算法,还看今朝。OI风光,千里**DP**,万里**背包**。望**深搜**内外,唯余莽莽;**广搜**上......
  • 代码随想录算法训练营第八天| leetcode 344、541、卡码网54
    反转字符串 leetcode344classSolution{public:voidreverseString(vector<char>&s){intindex1=0,index2=s.size()-1;chartmp;while(index1<index2){tmp=s[index1];s[index1]=s[index2];......
  • Sentinel-1 Level 1数据处理的详细算法定义(二)
    《Sentinel-1Level1数据处理的详细算法定义》文档定义和描述了Sentinel-1实现的Level1处理算法和方程,以便生成Level1产品。这些算法适用于Sentinel-1的Stripmap、InterferometricWide-swath(IW)、Extra-wide-swath(EW)和Wave模式。今天介绍的内容如下:S......
  • K8S标签与标签选择器
    目录一、标签1、简介2、为什么需要标签3、标签命名规范3.1、标签名3.2、标签的value4、标签的基本操作4.1、创建标签4.1.1、资源清单方式4.1.2、命令行方式4.2、查看标签4.2.1、查看刚才打标的两个pod4.2.2、通过标签过滤查询4.2.3、将标签显示在输出结果中4.3、添加标签4.3.1、分......
  • 【云服务器介绍】选择指南 腾讯云 阿里云全配置对比 搭建web 个人开发 app 游戏服务器
    ​省流目录:适用于博客建站(2-4G)、个人开发/小型游戏[传奇/我的世界/饥荒](4-8G)、数据分析/大型游戏[幻兽帕鲁/雾锁王国]服务器(16-64G)1.京东云-专属活动 官方采购季专属活动地址:京东云-618采购季服务器活动专区https://3.cn/20-J4jjX京东云又双叒降价了!活动页大改,增加两个大......