吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 966|回复: 10
收起左侧

[求助] python 选择排序代码求解读

  [复制链接]
tencentma 发表于 2022-9-12 12:45
下面的代码请大神帮忙解读,没看懂,谢谢。
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
[Python] 纯文本查看 复制代码
import sys 
A = [64, 25, 12, 22, 11] 
  
for i in range(len(A)): 
      
   
    min_idx = i 
    for j in range(i+1, len(A)): 
        if A[min_idx] > A[j]: 
            min_idx = j 
                
    A[i], A[min_idx] = A[min_idx], A[i] 
  
print ("排序后的数组:") 
for i in range(len(A)): 
    print("%d" %A[i]),

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

默不言 发表于 2022-9-12 13:36
本帖最后由 默不言 于 2022-9-12 13:38 编辑

个人的一些见解,我也是小白,不足之处,请指出。

import sys 
A = [64, 25, 12, 22, 11] 

for i in range(len(A)):     #对列表A进行循环取值

    min_idx = i     # 值相对小的索引值赋值给min_idx
    for j in range(i+1, len(A)):    # 对第i个值之后的值进行循环取值
        if A[min_idx] > A[j]:   #   将第i个值和第i+1之后的值进行对比,确定大小,这里会将小值取出来,并且可以判断出大值和小值
            min_idx = j             #   最小值的索引值赋值给min_idx

    A[i], A[min_idx] = A[min_idx], A[i]     #   将相对较小的值替换为索引为i的值,较大的值替换为索引为i+1的值,相当于把 32,25 位置对换,变成25,32

print ("排序后的数组:") 
for i in range(len(A)):     #   这里的列表A是已经调整好顺序的列表(相当于新列表:A = [11,12,22,25,64]
    print("%d" %A[i]),      #   标准化逐行输出排序后的列表A,这里的“,”不应该出现,标准化输出,建议使用format函数

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
shizi1521 + 1 + 1 热心回复!

查看全部评分

梦汐 发表于 2022-9-12 13:42
tyut2022 发表于 2022-9-12 15:28
lovejun 发表于 2022-9-12 17:17
选择排序,双重遍历,第一层遍历表示选择最小值的范围,第二层遍历表示选择最小值的过程
甜萝 发表于 2022-9-12 18:37
[Python] 纯文本查看 复制代码
# import sys 这行代码是多余的
A = [64, 25, 12, 22, 11]            # A是一个乱序的列表 既不是从小到大排序 也不是从大到小排序
   
for i in range(len(A)):             # 外层for循环 遍历列表中的五个元素 len(A)的长度为列表中的元素个数
      
   
    min_idx = i                     # 取列表中的第一个值 假设它是最小的 虽然实际上不是的
    for j in range(i+1, len(A)):    # 内层循环 循环次数为未排好序的元素个数
        if A[min_idx] > A[j]:       # 进行比较 拿min_idx与j比较 如果min_idx大于j min_idx的值就为j
            min_idx = j
                 
    A[i], A[min_idx] = A[min_idx], A[i] # 进行交换
   
print ("排序后的数组:")
for i in range(len(A)):
    print("%d" %A[i])
Wisdom_xiaogui 发表于 2022-9-12 22:07
# 选择排序,就是两个for循环,第一个for是有多少个元素,就比较多少次,形成有序列表。第二个for是从剩下无序列表中找到最小的值,加入到有序列表中。
# 即你可以看成是一个有序链表+无序链表
A = [64, 25, 12, 22, 11]            # A是一个乱序的列表

for i in range(len(A)):             # 外层for循环,遍历列表中的五个元素,从0到len(A)即5,不包含5,即0到4

    min_idx = i                     # 取出列表下标
    for j in range(i+1, len(A)):    # 内层循环 从剩下无序列表中找到最小的值,加入到有序列表中
        if A[min_idx] > A[j]:       # 进行比较 如果无序列表中有比设定的最小值还有小,则更新最下值下标。
            min_idx = j

    A[i], A[min_idx] = A[min_idx], A[i] # 将找到的最小值加入到有序列表中,将之前设置的最小值赋给无序列表的最小下标值

print ("排序后的数组:")
for i in range(len(A)):
    print("%d" %A[i])

# 可以参考这篇文章
# https://www.runoob.com/w3cnote/selection-sort.html
fanvalen 发表于 2022-9-12 22:16
这个是冒泡排序吗
SLCoCo 发表于 2022-9-13 23:47
一个图看懂
bitterain 发表于 2022-9-16 18:10

正解。不知道这位吾爱同仁,这图是在哪找到的呀,可否共享,谢谢。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 07:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表