常用排序算法:直接选择排序[通俗易懂]

常用排序算法:直接选择排序[通俗易懂]常用排序算法:直接选择排序

大家好,又见面了,我是你们的朋友全栈君。

直接选择排序算法思路:

第 1 趟,在待排序记录 r1 ~ r[n]中选出最小的记录,将它与 r1 交换;第 2 趟, 在待排序记录 r2 ~ r[n]中选出最小的记录,将它与 r2 交换;以此类推,第 i 趟在待排序 记录 r[i] ~ r[n]中选出最小的记录,将它与 r[i]交换,使有序序列不断增长直到全部排序 完毕。

例如[2, 4, 3, 1, 0],第一趟找到最小值为0,将0和第一位交换,得到[0, 4, 3, 1, 2],第二趟从[4, 3, 1, 2]中找到最小值1,再和第一位交换得到[0, 1, 3, 4, 2],以此类推知道排序完成。

代码实现:

def select_sort(nums):
    for i in range(len(nums)):  # 第i趟开始时 无序区为:[i:]
        min_pos = i  # 最小值位置
        for j in range(i + 1, len(nums)):  # 在无序区里面找最小值,并记录位置
            if nums[j] < nums[min_pos]:
                min_pos = j
        nums[min_pos], nums[i] = nums[i], nums[min_pos]  # 交换
        print(nums)


select_sort([2, 4, 3, 1, 0])

# [0, 4, 3, 1, 2]
# [0, 1, 3, 4, 2]
# [0, 1, 2, 4, 3]
# [0, 1, 2, 3, 4]
# [0, 1, 2, 3, 4]

 

转载于:https://www.cnblogs.com/FanMLei/p/10501000.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107244.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月20日 下午8:20
下一篇 2022年4月20日 下午8:40


相关推荐

  • django request.get_对象生气了怎么哄

    django request.get_对象生气了怎么哄Django在接收到http请求之后,会根据http请求携带的参数以及报文信息创建一个WSGIRequest对象,并且作为视图函数第一个参数传给视图函数。也就是我们经常看到的request参数。在这个

    2022年7月29日
    10
  • happypack多线程打包配置

    happypack多线程打包配置安装插件 npminstallha dev 配置 vue config js 中进行配置 顶部引入 constHappyPa require happypack consthappyTh HappyPack ThreadPool size os cpus length chainWebpack config config plugin happypack use HappyPack

    2026年3月26日
    2
  • MySql索引类型

    MySql索引类型Mysql支持哪几种索引索引是在MySql的存储引擎层中实现的,而不是在服务器层从数据结构角度1、B+树索引(O(log(n))):关于B+树索引,可以参考 MySQL索引背后的数据结构及算法原理BTREE在MyISAM里的形式和Innodb稍有不同在Innodb里,有两种形态:一是primarykey形态,其leafnode里存放的是数据,而且不仅存放了索引键的数据,还存放了其他字段的数据…

    2022年6月12日
    36
  • 硬件知识入门「建议收藏」

    硬件知识入门「建议收藏」各位有哪些方面想要了解的,我懂得就都解释给大家,要不我自己也想不到更新哪些方面

    2022年7月22日
    15
  • n8n+crawl4ai工作流,一键抓取任意网站!搭建RAG知识库+MCP自动化,让你的AI更准!更强!

    n8n+crawl4ai工作流,一键抓取任意网站!搭建RAG知识库+MCP自动化,让你的AI更准!更强!

    2026年3月15日
    1
  • 引用传递和值传递以及链表中的LinkList L、LinkList *L、LinkList &L

    引用传递和值传递以及链表中的LinkList L、LinkList *L、LinkList &L函数参数传递的两种方式为值传递和引用传递 1 传值方式传参 c 语言是按值传递的 在函数中被传递的参数的本身 实参 是不能被修改的 参数 x 传进去的时候会被复制了一份 copy 此后的修改都是在临时变量 copy 上 出了函数体 copy 被销毁 x 还是原来的 x 根本就没有被修改过 所以对变量 x 的修改无效 如果想要修改传入的参数 有两种方法 传地址 传入 x 的地址 也就是将指向 x 的指针作为参数进行传

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号