【python】选择排序法改进

本文探讨了选择排序算法的优化思路,通过同时寻找数组中最小值和最大值,提高排序效率。文章详细介绍了改进后的选择排序算法实现逻辑,包括如何处理最小值与最大值相同的特殊情况,以及在特定情况下提前终止排序过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

选择排序法改进思路:

  • 如果每轮只找最小值,效率较低,可以考虑每次同时寻找最小值和最大值;
  • 并且在某一轮如果最小值与最大值相同,说明剩下的数字都相同,可以直接结束。

实现逻辑:

  • 与选择排序不同的是,需要考虑到如果第i轮里,恰好第i个数就是最大值时
  • 先交换minindex和i之后,最大值的下标变成了minindex
  • 这时候应该交换minindex和n-i-1,而不是maxindex和n-i-1。
# -*- coding: utf-8 -*-

from swax_function import swax

def selection_sort2(x):
   i = 0
   '''
   1、最小值更新的位置是:i
   2、最大值更新的位置是:len(list)-1-i
   3、整个list的索引的值最大是len(list)-1;因为索引从0开始
   '''
   while i <= len(x) // 2:
       minindex = i
       maxindex = i
       j = i + 1
       # 遍历后续位置,更新最大值和最小值的位置
       while j < len(x)-i:
           if x[minindex] > x[j]:
               minindex = j
           if x[maxindex] < x[j]:
               maxindex = j
           j+= 1
       #如果最小值与最大值相同,说明剩下的数字都相同,可以直接结束
       if x[minindex] == x[maxindex]:
           return x 
       # 如果最小值的索引位置不是初始位置,则更新最小值到初始的位置
       if minindex != i:
           swax(x,i,minindex)
       # 最大值和最小值的索引位置成对出现,
       # 如果最大值的索引位置不是总的索引值减去最小值的索引,则更新最大值到对应的索引位置
       if maxindex != len(x)-1-i :
           # 如果初始索引的位置就是最大值时,先交换minindex和i之后,最大值的下标变成了minindex
           if maxindex != i:
               swax(x,len(x)-1-i,maxindex)
           # 应该交换minindex和n-i-1,而不是maxindex和n-i-1
           else:
               swax(x,len(x)-1-i,minindex)
       i+= 1 
   return x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值