Python 冒泡排序

基本思想

从数组第一位开始,顺序地将相邻的两个数进行比较,小在前大在后,一趟比较下来,最大的就沉到最后去了;第二趟就从第一个到倒数第二个,以此类推,直到剩下第一个和第二个相比较。


Python实现

def heapSort(a):
    # 冒泡排序: 小->大
    n = len(a)
    for i in xrange(n):
        for j in xrange(n - i - 1):
            if a[j] > a[j + 1]:
                a[j], a[j + 1] = a[j + 1], a[j]
    return a

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

Python实现---加入判断标志

def heapSort(a):
    # 冒泡排序: 小->大
    # 加入了标志判断是否已全部排好序
    n = len(a)
    change = True
    while change:
        for i in xrange(n):
            change = False
            for j in xrange(n - i - 1):
                if a[j] > a[j + 1]:
                    a[j], a[j + 1] = a[j + 1], a[j]
                    change = True
    return a

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

Python实现---两端同时进行

def heapSort(a):
    # 冒泡排序: 小->大
    # 对冒泡排序的改进,同时选出最大和最小,外层循环为 n / 2
    low = 0
    hight = len(a) - 1
    while low < hight:
        for i in xrange(low, hight):
            if a[i] > a[i + 1]:
                a[i], a[i + 1] = a[i + 1], a[i]
        for i in xrange(hight - 1, low, -1):
            if a[i - 1] > a[i]:
                a[i - 1], a[i] = a[i], a[i - 1]
        low += 1
        hight -= 1
    return a

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

效率

O(n^2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值