简单选择排序

一.定义:

    1.属于选择排序

    2.两两比较大小,找出极值(极大值或极小值)被放在固定的位置,这个固定位置一般指的是某一端

    3.结果分为升序和降序排列

    4.降序:n个数从左至右,索引从0开始到n-1,两两依次比较,记录大值索引,此轮所有数比较完毕,将大数和索引0数交换,如果大数就是索引0,不交换.第二轮,从索引1开始比较,找到最大值,将它和索引1位置交换,若它就在索引1位置则不交换.以此类推,每次左边都会固定下一个大数.

    5.升序:和降序相反.

二.实现方法:

nums=[1,3,2,4,5,7,6]
length=len(nums)
for i in range(length):
    maxindex=i
    for j in range(i+1,length):
        if nums[j]>nums[maxindex]:
            maxindex=j
    if i!=maxindex:
        nums[i],nums[maxindex]=nums[maxindex],nums[i]

三.优化方法:二元选择排序

    同时固定左边最大值和右边最小值,减少迭代元素的次数

    1.length//2整除,通过几次运算就可以发现规律

    2.由于使用了负索引,所以条件中要增加i==length + minindex

nums=[1,3,2,4,5,7,6]
length=len(nums)
for i in range(length//2):  #利用负索引右置最小值
    maxindex=i
    minindex=-i-1
    minorigin=minindex
    for j in range(i+1,length-i): 
        if nums[maxindex]<nums[j]:
            maxindex=j
        if nums[minindex]>nums[-j-1]:
            minindex=-j-1
    if i!=maxindex:
        nums[i],nums[maxindex]=nums[maxindex],nums[i]
        if i == minindex or i==length + minindex:  #若最小值被交换过,要更新索引
            minindex = maxindex
    if minorigin != minindex:
        nums[minorigin],nums[minindex]=nums[minindex],nums[minorigin]
    if minorigin != minindex and nums[minorigin] == nums[minindex]:  #此处优化为排除元素值都相等的情况
        nums[minorigin],nums[minindex]=nums[minindex],nums[minorigin]



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值