码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【21天学习经典算法】直接选择排序(附Python完整代码)


    前言

    博主一头小山猪目前已开放文章如下:
    一文学懂经典算法系列之:顺序查找(附讲解视频)

    一文学懂经典算法系列之:直接插入排序(附讲解视频)

    一文学懂经典算法系列之:直接选择排序(附讲解视频)

    活动地址:CSDN21天学习挑战赛

    列表的分类与顺序查找

    • 前言
    • 概念
      • 直接选择排序
    • 代码实现
      • 直接选择排序
    • 参考资料

    概念

    直接选择排序

    对于直接选择排序的数组,该数组大概率是无序的,若该数组是有序的(且该数组是用户的目标顺序),那么就不用通过算法来进行排序了。
    直接选择排序的定义
    通过比较最小值,得到每一个循环中的最小值的索引,并得到对应值后,将其与循环后的次位交换。
    直接选择排序的工作方式
    在原数组中选出序列中最小元素放在首位,依次从剩下的数组元素中选出最小元素放于次位,直至所有元素都选择完毕,排序结束。
    伪代码
    Straight_Select ( A ) : (A): (A):

    1 for i = 1 to n - 1
    2 		k = i
    3		for j = i + 1 to n
    4			if A[j] < A[k]
    5				k = j
    6		if k != i
    7        	exchange A[i] with A[k]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    伪代码解析
    对于直接选择排序,本文将其伪代码过程命名为Straight_Select_Sorting,其中的参数是一个数组 A [ 1... n ] A[1...n] A[1...n],包含长度为 n n n的要排序的一个序列。在Python代码中, A A A中元素的数目 l e n ( A ) len(A) len(A)来表示。该算法原址排序输入的数之后,算法在数组 A A A中重排这些数,在任何时候,最多只有其中的常数个数字存储在数组外面。在过程Straight_Select结束时,输出数组 A A A包含排序好的输出序列。

    对于直接选择排序的个人理解
    假设数组 A A A中有 n n n个元素,采用 m i n ( ) min() min()函数在数组 A A A找到最小的一个数,取出后与排序为首位的数字交换。那么此时原数组变为 [ m i n , n − 1 的数组 ] [min,n-1的数组] [min,n−1的数组],我们暂且不管原先排首位的数字去了哪里。称右侧的 [ n − 1 的数组 ] [n-1的数组] [n−1的数组]为数组1,对右侧的 [ n − 1 ] [n-1] [n−1]的数组即数组 1 1 1再次进行上一步的操作,即采用 m i n ( ) min() min()函数在数组 1 1 1里找到最小的一个数,取出后与排序为首位的数字交换。注意,此时的数组 1 1 1的首位是原数组的次位。如此往复循环,最终都将最小的一个数按次序排列下去。

    代码实现

    对于直接选择排序的代码实现,有两种方式可以实现,第一种在【21天学习经典算法】插入排序(附Python完整代码)
    中Python代码实现插入排序的空数组排序已经实现,因此本文只讲述在原数组 A A A中实现直接选择的排序的代码过程。

    直接选择排序

    沿用之前创建的数组
    A = [ 41 , 54 , 95 , 32 , 11 , 5 , 7 , 10 , 21 , 9 , 85 , 12 , 13 , 15 , 64 , 84 ] A = [41, 54, 95, 32, 11, 5, 7, 10, 21, 9, 85, 12, 13, 15, 64, 84] A=[41,54,95,32,11,5,7,10,21,9,85,12,13,15,64,84]

    A = [41, 54, 95, 32, 11, 5, 7, 10, 21, 9, 85, 12, 13, 15, 64, 84]
    for i in range(len(A)):
        # a是原数组的首位,b是不断缩小的数组中的最小值,c是不断缩小的数组中的最小值的索引值
        a, b, c = A[i], min(A[i:len(A)]), A.index(min(A[i:len(A)]))
        # 将原数组的首位数字与原数组的最小值进行交换
        A[i], A[c] = b, a
    print(A)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    以上就是个人在直接选择排序中的理解,如果错误之处,还望指正。

    参考资料

    1. 小山猪——经典算法专栏
    2. 数据结构教程 第5版
    3. 直接选择排序 - python实现
  • 相关阅读:
    Bridge 2024 新版本 Bridge 2024 mac软件特色和功能
    C++:C++编程语言学习之数学运算&运算符及其优先级的简介、案例应用之详细攻略
    全面认识痛风:症状、风险因素、发病机理及管理
    Kotlin高仿微信-第37篇-拍照
    Element UI 多选表格【翻页多选】全能版(含翻页多选数据反显、toggleRowSelection失效的原因解析和解决方案)
    布局--QT Designer
    小程序开发平台源码系统 各种类型小程序任由选择 带完整的搭建教程
    umask计算创建文件、目录的默认权限
    7-34 通讯录的录入与显示
    shell 初探
  • 原文地址:https://blog.csdn.net/AlbertDS/article/details/126230423
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号