选择排序小谈

选择排序顾名思义(以递增排序为例,使用Python语言):选择(选择最小的元素) + 排序(放置选择到的数到相应位置)

1. 选择——在一堆数字之中找到最小的数是很容易完成的:

def min(list):
    min = 0
    for i in range( len(list) ):
        if list[min] > list[i]:
           min = i 
    return min

list = [3, 4, 5, 9, 2]
index = min(list)
print list[index], index

使用函数的方式供下面步骤调用。


2.排序——将数字放置到合适的位置有很多种方法:

其一:生成一个新列表,每找到一个最小值就加入到新列表的最后——使用append函数(其中要注意把找到的最小值从原列表中剔除)。整个实现如下:

lst = [3, 4, 5, 9, 2, 6, 7, 8, 20, 10]
list_done = list()

for i in range( len(lst)):
    mi = min(lst)
    list_done.append( lst[mi] )
    
    lst.pop( mi)

print list_done

其二:与列表中的第一个交换。

列表中有多少数,就要循环多少次(当然最后一个数似乎没有必要比较自然而然的就是最大的),每次循环都将找到的最小的数与子列表 的第一个进行交换。

(子列表:每一次循环都刨除第一个数,因为第一个数就是之前找到的最小的数放到第一位的,第一次循环的子列表就是整个列表。子列表使用Python的切片操作实现)

def swap(i, mi):
    print 'current i , mi is:',lst[i],lst[mi]
    temp = lst[i]
    lst[i] = lst[mi]
    lst[mi] = temp
    
lst = [3, 4, 5, 9, 2, 6, 7, 8, 20, 10,1, 0, 50, 5]

for i in range( len(lst) ):
    nLst = lst[i:]
    print 'current the list is:', lst
    print 'current the sub list is:', nLst
    print 'current index is:', i
    mi = min( nLst )
    swap(i, mi+i)   #use index as parameter or will cause mistake

print lst
注意细节上的逻辑错误,在swap中,第二个参数不能够直接传mi,因为 mi 是在砍掉了 i 项之后的 nLst 中的位置 ≠ lst中的位置, 所以需要给mi 补上 i 才是 lst 中正确的位置。








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值