Python 直接选择排序

基本思想

从要排序的数组中选出最小(或最大)的数,与第一位交换,再从剩下的数组中选择最小(或最大)的数,与第二位交换,以此执行,直到最后两个数相比较。


Python实现

def simpleSelect(a):
    # 简单选择排序: 小->大
    for i in xrange(0, len(a) - 1):
        x = min(a[i:])
        x_index = a.index(x)
        a[i], a[x_index] = a[x_index], a[i]
    return a

print simpleSelect([11, 1, 6, 9, 8, 5])


Python实现--不使用自带的min函数

def simpleSelect(a):
    # 简单选择排序: 小->大
    for i in xrange(0, len(a) - 1):
        min_index = i
        for j in xrange(i, len(a)):
            if a[min_index] > a[j]:
                min_index = j
        a[i], a[min_index] = a[min_index], a[i]
    return a

print simpleSelect([11, 1, 6, 9, 8, 5])

Python实现--二元选择排序

def simpleSelect(a):
    # 二元选择排序: 小->大
    # 对简单选择排序的改进,同时选出最大和最小,循环为 n / 2
    n = len(a)
    for i in xrange(0, n / 2):
        min_index = i
        max_index = i
        for j in xrange(i + 1, n - i):
            if a[min_index] > a[j]:
                min_index = j
                continue
            if a[max_index] < a[j]:
                max_index = j
        a[i], a[min_index] = a[min_index], a[i]
        # 注意,这个很重要!
        if i ==  max_index:
            max_index = min_index
        a[n - i - 1], a[max_index] = a[max_index], a[n - i - 1]
    return a

print simpleSelect([11, 1, 6, 9, 8, 5])


效率

O(n^2)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值