首页 > 编程语言 >算法学习笔记三一选择排序

算法学习笔记三一选择排序

时间:2023-12-15 22:24:37浏览次数:37  
标签:index min 元素 list 无序 算法 三一 排序

目录

什么是选择排序

选择排序的主要思想是(升序为例):第一次从待排序的数据元素中选出最小的一个元素,和数组的起始位置元素进行交换,然后再从剩余的未排序元素中寻找到最小元素,然后和未排序的序列的第一个元素进行交换。每次在未排序序列中选择一个最小元素这样已排序序列就是一个升序序列。其算法时间复杂度为O(n^2)

算法原理

  1. 一趟排序记录最小的数,放到第一位置。
  2. 在一趟排序记录列表无序区最小的数,放到第二个位置
  3. 重复上述步骤...
    注意: 列表分为有序区和无序区,每次查找最小值从无序区开始查找即可。

示例代码

def select_sort(list):
    for i in range(len(list) - 1):  # 第i趟
        min_index = i  # 记录最小位置(无序区的第一个位置)
        for j in range(i + 1, len(list)):  # 每次找到无序区的最小值
            if list[j] < list[min_index]:
                min_index = j
        list[i], list[min_index] = list[min_index], list[i]
    return list
'''

标签:index,min,元素,list,无序,算法,三一,排序
From: https://www.cnblogs.com/chase-youth/p/17904278.html

相关文章

  • 算法学习Day3虚拟头指针,设计链表,反转链表
    Day3虚拟头指针,设计链表,反转链表ByHQWQF2023/12/15笔记203.移除链表元素给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val==val的节点,并返回新的头节点。解法:虚拟头指针看起来非常简单,但是由于如果直接对原始的链表进行操作,如果头节点的v......
  • 双指针算法概念
    "双指针"是一种在数组或链表中使用两个指针来进行操作的技术。这两个指针通常被称为“快”指针和“慢”指针,或者“左”指针和“右”指针,根据其在数据结构中的移动速度或位置来命名。双指针算法在处理数组或链表的问题中非常有效,可以帮助我们以更优的时间复杂度解决问题。常见的应......
  • 代码随想录算法训练营第三天 | 链表理论基础,203.移除链表元素,707.设计链表,206.反转链
    一、链表理论基础学习:1.链表定义线性表的一种存储方式,在逻辑上连续的数据在物理存储中可以不连续。classListNode{intval;ListNodenext;ListNode(){}ListNode(intval){this.val=val;this.next=null;}ListN......
  • 随机快速排序
    快速排序是一个经典的算法,它是基于比较排序中最快的算法之一,时间复杂度是O(N*logN)的,时间复杂度证明可以用master公式证明。但经典的快速排序会存在最坏的情况,会使得快速排序的时间复杂度退化到O(N2),这样快速排序也就失去了意义。因此我们为了避免出现最坏的情况,来引入随机一行......
  • 代码随想录算法训练营Day3 | 203.移除链表元素、707.设计链表、206.翻转链表
    这三道题都不涉及什么难以理解的算法,是对链表基础知识的一个复习巩固对于有数据结构基础的同学来说这个没有什么难度但是,写代码的过程中,我明显感觉到,我需要更加完善和统一的代码风格,作为一个前OIer,我的c和cpp混用的情况在基础数据结构的封装层面造成了不小的混乱!我需要去补充c......
  • 代码随想录算法训练营Day2 |977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵
    明天四级考试了,时间非常紧张,好在这些数组相关的算法题很久之前就做过,思路上是不存在不理解的地方的。有序数组的平方是一道非常直观的双指针方法的应用,实现过程之中没有什么坑。长度最小的子数组就是我们的滑动窗口方法了,题目不难,但是这种处理方式有着很深刻的背景,之后还会遇到......
  • 文心一言 VS 讯飞星火 VS chatgpt (157)-- 算法导论12.3 4题
    四、用go语言,删除操作可交换吗?可交换的含义是,先删除x再删除y留下的结果树与先除y再删除x留下的结果树完全一样。如果是,说明为什么?否则,给出一个反例。文心一言:在Go语言中,删除操作是不可交换的。这意味着先删除节点x再删除节点y与先删除节点y再删除节点x留下的......
  • CSS 优先级算法
    CSS的优先级是根据样式声明的特殊性值来判断的。选择器的特殊性值分为四个等级,如下:(1)标签内选择符x,0,0,0(2)ID选择符0,x,0,0(3)class选择符/属性选择符/伪类选择符0,0,x,0(4)元素和伪元素选择符0,0,0,x计算方法:(1)每个等级的初始值为0(2)每个等级的叠加为选择器出现的次数相......
  • 【kmp算法】字符串匹配
    一,解决问题kmp算法解决的是字符串匹配的问题,具体来说假定我们要在主串s[]中匹配模式串p[],找到匹配到的位置loc;二,具体实现和演变过程最自然的想法是暴力写法(BF)枚举主串字符s[i],和模式串p[j]。一个一个匹配,如果匹配失败,i指针回退回起点,往前进一位,再次进行比较,......
  • Sortable 拖拽排序组件实现原理
    如果想要实现拖拽排序功能,有很多现成的库可以供使用,比如Sortable.js(vuedraggable)、dnd-kit(react-dnd)等可以轻松帮助实现这一功能。本文的目标不是介绍如何使用这些库,而是手动实现一个简单版的Sortable组件。通过本文的阅读,您将深入了解拖拽排序的核心原理。使用模板使用Sor......