首页 > 其他分享 >选择排序

选择排序

时间:2025-01-12 10:14:22浏览次数:1  
标签:index arr min 元素 选择 数组 排序

选择排序(Selection Sort)是一种简单直观的排序算法。它的工作原理是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。以下是选择排序的详细介绍:

1. 算法步骤

  1. 初始状态:假设有一个长度为 n 的数组 arr,待排序的元素集合为整个数组。
  2. 第一趟排序
    • 从数组的第一个元素开始,将其视为当前最小元素,记录其索引。
    • 遍历数组中剩余的元素,与当前最小元素比较。如果找到比当前最小元素更小的元素,则更新最小元素及其索引。
    • 遍历结束后,将找到的最小元素与数组的第一个位置的元素交换位置。此时,数组的第一个元素就是整个数组中的最小元素,即已完成第一个位置的排序。
  3. 后续排序
    • 对数组中从第二个元素开始到最后一个元素的子数组重复上述步骤。每次找到子数组中的最小元素,并将其与子数组的起始位置元素交换。
    • 每完成一趟排序,已排序的元素个数就增加一个,待排序的子数组长度就减少一个。
  4. 最终状态:经过 n - 1 趟排序后,整个数组就被排好序了。

2. 代码实现

下面是Python语言实现选择排序的代码:

def selection_sort(arr):
    n = len(arr)
    for i in range(n):
        min_index = i
        for j in range(i + 1, n):
            if arr[j] < arr[min_index]:
                min_index = j
        arr[i], arr[min_index] = arr[min_index], arr[i]
    return arr

3. 算法分析

  • 时间复杂度:选择排序的时间复杂度是 \(O(n^2)\),因为无论数组的初始状态如何,都需要进行 \(n - 1\) 趟比较,每趟比较的次数依次为 \(n - 1\), \(n - 2\),..., 1,总的比较次数为 \(1 + 2 +... + (n - 1) = \frac{n(n - 1)}{2}\)。
  • 空间复杂度:选择排序的空间复杂度是 \(O(1)\),因为它只需要有限的额外空间来进行交换操作,不需要与输入规模相关的额外空间。
  • 稳定性:选择排序是一种不稳定的排序算法。例如,对于数组 [5,5,3],在排序过程中,第一个 5 可能会与 3 交换位置,导致两个 5 的相对顺序发生改变。

标签:index,arr,min,元素,选择,数组,排序
From: https://www.cnblogs.com/codersgl-blog/p/18666686

相关文章

  • 插入排序
    插入排序(InsertionSort)是一种简单直观的排序算法,它的工作原理类似于扑克牌的整理过程。在摸牌时,玩家会将每张新摸到的牌插入到手中已有的有序牌中的合适位置。1.算法步骤初始状态:将数组分为已排序和未排序两部分。初始时,数组的第一个元素被认为是已排序部分,其余元素是未排序......
  • CSS选择器有哪些?哪些属性可以继承?
    CSS选择器有多种类型,包括但不限于以下几种:元素选择器:根据HTML元素的标签名来选择元素,例如p选择器会选择所有的段落元素。类选择器:使用.来选择具有特定类的元素,例如.my-class会选择所有类名为my-class的元素。ID选择器:使用#来选择具有特定ID的元素,例如#my-id会选择ID为my-......
  • 拓补排序板子(邻接表实现)
    #include<iostream>#include<vector>usingnamespacestd;constintmaxn=2e5+5;vector<int>graph[maxn];//邻接表voidaddedge(intu,intv){graph[u].emplace_back(v);}intindegree[maxn];//入度表intmain(){intn,m;cin>>n>......
  • 课程表(拓补排序)
    题目链接:https://leetcode.cn/problems/course-schedule-ii/description/题意:给定n门课程,规定只有学完某一个课程才能继续学下一门课程,让你输出学习顺序。如果成环,则返回空数组思路:拓补排序,入度删除法需要提前准备一个indegree数组用来统计每个节点的入度大小,用数组模拟双端......
  • 20250108@Excel(排序问题+文本格式转换+查找多条件的个数)
    1.需求:首行标题需要显示 百分比问题:直接="时间进度:"&E1/E2,显示常规解决方法:使用text函数转换格式2.需求:当需要对某些数值排序时,如果出现相同数值,需要做并列排名问题:使用rank排序会出现中断层排名,如图,2之后是4解决方法:数与数之间进行比较,计算布尔值false的个数。3......
  • php二维数组根据某个字段排序
    1$worderData=[2[3'id'=>1,4'name'=>'张三',5'distance'=>0.1,6......
  • 2.6.桶排序
    桶排序桶排序也是一种非常快的排序算法,但是对于个别数组中某个元素比较大的情况比较费内存。它的实现分为三个步骤:第一步,根据数组创建桶。具体桶的个数取决于数组中元素的大小,所谓桶其实也是一个数组,只不过桶的索引代表数组的元素,而索引值代表在原数组中此元素的个数,例如......
  • 代理IP的误区与真相如何选择
    一,代理IP:基本概念与常见误区在数字化时代,代理IP成为了网络世界的一把双刃剑。它既能帮助用户隐藏真实身份、绕过地理限制,也可能因使用不当而成为隐私和安全的威胁。代理IP,即中间服务器,用户通过它来转发网络请求,从而隐藏自己的IP地址。常见的代理IP协议包括HTTP、HTTPS和So......
  • 一对一聊天源码,使用筛选条件选择记录
    一对一聊天源码,使用筛选条件选择记录在从表格中选择记录时,您可以使用"WHERE"语句来筛选选择的记录:示例选择地址为"ParkLane38"的记录:importmysql.connectormydb=mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword......
  • 更多的选择器
    更多的选择器更多伪类选择器first-child选择第一个子元素first-of-type,选中子元素中第一个指定类型的元素last-childnth-child选中指定的第几个子元素even:关键字,等同于2nodd:关键字,等同于2n+1nth-of-type选中指定的子元素中第几个某类型的元素更多的伪元素......