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的位置