排序和搜索(五)——选择排序的python实现

选择排序:先指定最大数据所在的位置为0,第一次遍历比较其他位置数据与0上数据的大小,如果大于,则替换改位置为最大数据位置,遍历结束,交换数据(python列表为最大数据与列表最后数据交换)。回到初始指定位置0,进行第二次遍历(第一次遍历得出的最大数据不参与第二次遍历),直至剩列表最后一个数据

【分析】虽然和冒泡排序一样,选择排序的时间复杂度仍然是O(n^2),但是数据交换次数比冒泡排序要少~~

【数据】

54,26,93,17,77,31,44,55,20

【要求】:升序排序

【代码】:

#选择排序
def selectionSort(alist):
    last=len(alist)-1
    count=0
    while last>0:
        # 设定初始最大值所在的位置为0
        #必须放在循环里面,不然第一个位置就没法参与排序
        maxPosition = 0
        for i in range(1,last+1):
            if alist[i]>alist[maxPosition]:
                # 替换最大值所在的位置
                maxPosition=i
        if alist[last]!=alist[maxPosition]:
            #交换最大值和最后位置的数据
            temp=alist[last]
            alist[last]=alist[maxPosition]
            alist[maxPosition]=temp
            count=count+1
        last=last-1
    print('选择排序的数据交换次数为',count,'次')
    return alist
# print(selectionSort([5,2,3,8,4,9,1,1,1,1,11,1,15,6,4,8,9,7,5,1,4,6,1,3,4,999,7,8,78,7,9,5,5]))
print(selectionSort([54,26,93,17,77,31,44,55,20]))

【结果展示】:

选择排序的数据交换次数为 6 次

[17, 20, 26, 31, 44, 54, 55, 77, 93]

#如果没有最后的判断,数据交换次数为8次

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值