python设计选择排序法

选择排序法

选择排序法(Selection Sort)可以使用两种方式排序,即在所有的数据中,当大到小排序时,将最大值放大第一个位置,当从小到大排序时,将最大值放入到最后一个位置,就这样的方式循环遍历,循环交换,以此重复,直到排序完成为止

原始数据
5523876216

第一次排序:找到最小值与第一个交换

第一次
1623876255

第二次排序:找到最小值与第二个交换

第二次
1623876255

第三次排序:找到最小值与第三个交换

第三次
1623556287

按照这种方式依次重复

选择排序法的分析

  • 无论最坏情况,最佳情况还是平均情况都需要找到最大值(或者最小值),因此其比较次数为(n-1)+(n-2)+(n-3)+…+3+2+1=n(n-1)/2次,时间复杂度为O(n^2)
  • 由于选择排序是以最大或者最小值直接与最前方未排序的键值交换,数据排列顺序很有可能被改变,故不是稳定排序法
  • 只需要一个额外空间,所以空间复杂度为最佳
  • 此排序法适用于数量小或者有部分数据已经排序过的情况

例子:设计程序实现选择排序法

data = [2,3,1,8,5,6]
def showData(data):
    for i in range(len(data)):
        print('%3d'%data[i],end='')
    print()

def select(data):
    for i in range(5):
        for j in range(i+1,6):
            if data[i] > data[j]:
                data[i],data[j] = data[j],data[i]
    print()

print('原始数据:')
showData(data)
print('\n--------------------------------------')
select(data)
print('排序后的数据')
showData(data)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牧码文

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值