Python数据结构与算法 算法基础3

冒泡排序:

        若第i位大于第i+1位,则交换,实现较大一位的上浮。

def Bubble_Sort(li):
    l = len(li)
    for a in range(len(li) - 1):
        flag = False
        for i in range(len(li) - 1 -a):
            if li[i] > li[i + 1] :
                li[i], li[i + 1] = li[i + 1], li[i]
                flag = True
        print(a)
        print(li) #打印一下每次交换的结果
        if not flag :   #如果在某一趟循环中没有发生交换,则证明列表已经排好序了
            return li
    return li

s = [2, 3, 8, 1, 6, 7]
print(s)
a = Bubble_Sort(s)
print(a)
[2, 3, 8, 1, 6, 7]
0
[2, 3, 1, 6, 7, 8]
1
[2, 1, 3, 6, 7, 8]
2
[1, 2, 3, 6, 7, 8]
3
[1, 2, 3, 6, 7, 8]
[1, 2, 3, 6, 7, 8]

选择排序:

        记录最小值的下标,在有序区的最后一位进行交换

def select_sort(li):
    for i in range(len(li) - 1):
        min_loc = i
        for j in range(i+1, len(li)):
            if li[min_loc] > li[j] :
                min_loc = j
        li[i], li[min_loc] = li[min_loc], li[i]
        print(i)
        print(li)
    return li


s = [2, 3, 8, 1, 6, 7]
print(select_sort(s))
0
[1, 3, 8, 2, 6, 7]
1
[1, 2, 8, 3, 6, 7]
2
[1, 2, 3, 8, 6, 7]
3
[1, 2, 3, 6, 8, 7]
4
[1, 2, 3, 6, 7, 8]
[1, 2, 3, 6, 7, 8]

插入排序:

        设前i位为有序区,则len()-i位为无序区,将无序区第一位与有序区最大一位比较,若小于最大一位,则与有序区第二大的数比较,直到找到插入位置,有序区增加一位,无序区减少一位。

def insert_sort(li):
    for i in range(1, len(li)):
        j = i - 1
        empty = li[i]
        while j >= 0 and li[j] > empty:
            li[j + 1] = li[j]
            j -= 1
        li[j + 1] = empty
        print(i)
        print(li)
    return li

s = [2, 3, 8, 1, 6, 7]
print(insert_sort(s))
1
[2, 3, 8, 1, 6, 7]
2
[2, 3, 8, 1, 6, 7]
3
[1, 2, 3, 8, 6, 7]
4
[1, 2, 3, 6, 8, 7]
5
[1, 2, 3, 6, 7, 8]
[1, 2, 3, 6, 7, 8]

插入排序、冒泡排序、选择排序的时间复杂度都是O(n^2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值