目录
生成一个长度为10的范围在0~20的随机不重复数组
import random
temp_list = []
while True:
num = random.randint(0, 20)
if num not in temp_list:
temp_list.append(num)
if len(temp_list) == 10:
break
print temp_list
一、插入排序
def insert(list):
"""
插入 :倒序比较,由于每次只能向前一步,所以每次插入都要重新赋值(i = j)
"""
length = len(list)
for i in range(1, length): # 忽略第一个,遍历后面的
j = i - 1 # 交换的位置起始值(即和最大值先比较)
while j >= 0 and list[j] > list[i]: # 拿需要插入的数据和之前排序好的列表比较,如果大于排序好的最后一位,i 直接加 1 就行;如果小于的话,相邻位置一直两两交换,直到大于 j 位置上的数字(直到为0索引位置)
list[i], list[j] = list[j], list[i]
print('j:', j, list)
i = j # i 始终是 这个需要插入的数据的下标值
j -= 1
print("finished:", list)
二、冒泡排序
def bubble_sort(list):
length = len(list) - 1 # 假设列表有3个数,因为每次会找出列表中的最大值,所以找出2个最大值就不用排序了
for i in range(length): # [0, length-2],表示遍历 第 i 次的次数
flag = True # 标记优化,若是此次循环没有任何交换,就可以认为全部顺序已定
for j in range(length - i): #[0, length-2-i],所以遍历了i次后,后面i个数 便不用比较了
if list[j] > list[j+1]: # 如果这个数比后面的数大,便往后移动;因为少取一次,所以j+1不会超出范围
list[j], list[j+1] = list[j+1], list[j]
flag = False
print("j", j, list)
print("i", i, list)
if flag:
break
print('bubble_sort', list)
三、快速排序(递归)
def kuaipai(list):
"""kuaipai"""
if list == []:
return []
else:
temp = list[0]
left = [i for i in list if i < temp] # 不考虑重复数字,不加等号
right = [i for i in list if i > temp]
return kuaipai(left) + [temp] + kuaipai(right)
四、选择排序
def choose(list):
length = len(list)
for i in range(length): # [0, length - 1],遍历的次数
x = i # 以此为比较的基数,每次选出最小值
for j in range(i, length): # [i, length - 1]
if list[x] > list[j]:
x = j # 如果找到较小值,便赋给 x,以便和后面的数再次比较
list[i], list[x] = list[x], list[i] # 最后,把找到的最小值交换到遍历的 i 索引下
print(list)