数据结构与算法(排序)

1.冒泡排序

def bubble_sort(list):
    for i in range(len(list)-1):
        for j in range(len(list)-i-1):
            if list[j] > list[j+1]:
                list[j], list[j+1] = list[j+1], list[j]     # 如果前一个数比后一个数大,则交换位置

  改进:

def bubble_sort(list):
    for i in range(len(list)-1):
        opt = True  # 设置一个值,当下面发生交换时,改变该值,当没有发生交换时,说明裂变顺序已经排好了
        for j in range(len(list)-i-1):
            if list[j] > list[j+1]:
                list[j], list[j+1] = list[j+1], list[j]     # 如果前一个数比后一个数大,则交换位置
                opt = False
        if not opt:     # 当没有发生交换时,opt 的值没有被改变,则执行这个语句 结束循环
            return

 2.选择排序

def select_sort(list):
    for i in range(len(list)-1):    # 排序列表的长度-1次
        min_val = i     # 先假设列表的最小的值的下标为i
        for j in range(i+1, len(list)):     # 遍历列表的无序区,将假设的最小的值和无序区的值依次对比
            if list[j] < list[min_val]:     # 如果无序区的值小于假设的最小值,则将小的值的下边赋值给min_val,
                min_val = j                 # 遍历一遍后,得到最小值的下标。
        list[i], list[min_val] = list[min_val], list[i]     # 将列表无序区的第一个数和最小的数互换

select_sort(list)

3.插入排序

list = [9, 6, 2, 9, 6, 5, 8, 3, 1]
def insert_sorf(list):
    for i in range(1, len(list)):
        tmp = list[i]   # 抽到的牌
        j = i-1   # 手里的最右边的牌的下标
        while j >= 0 and list[j] > tmp:  # 当手里的牌大于抽到的牌时,
            list[j+1] = list[j]          # 将手里的牌的往后移动
            j = j-1                      # 同时将手里的牌比抽到的牌的大的下标往前移,将抽到的牌和前面的牌再比较
        list[j+1] = tmp     # 当手里的牌不大于抽到的牌时,将抽到的牌赋值给手里牌的右边,即手里牌的下标加1的位置
原文地址:https://www.cnblogs.com/wangdianchao/p/13289532.html