1、快速排序
value = [80,82,75,60,100,90,95,88,85,72]
def quick(value):
# 递归退出条件
if len(value) < 2:
return value
tmp = value[0]
small = [x for x in value if x < tmp]
equal = [x for x in value if x == tmp]
big = [x for x in value if x > tmp]
return quick(small) + equal + quick(big) # 从小到大拼接
print(quick(value))
2、插入排序
value = [80,82,75,60,100,90,95,88,85,72]
def insert(value):
# 外层遍历无序数据,无序从第二个数开始
for i in range(1,len(value)):
tmp = value[i]
index = i
# 内层遍历有序数据
for j in range(i-1,-1,-1):
if value[j] > tmp: # 有序数据大于关键数
value[j+1] = value[j] # 有序数据后移
index = j # 关键数下标前移
else:
index = j+1
break
value[index] = tmp
return value
print(insert(value))
3、冒泡排序
value = [80,82,75,60,100,90,95,88,85,72]
def sortport(value):
for i in range(len(value)-1):
flag = False
for j in range(len(value)-1-i):
if value[j] > value[j+1]:
value[j],value[j+1] = value[j+1],value[j]
flag = True
# 未发生交换,说明后面的数据有序,退出遍历
if flag == False:
break
return value
print(sortport(value))
4、二分查找
lis = [1,3,4,5,7,9,10,11,12,14,16,17,19]
def binary(lis,key):
left = 0
right = len(lis)-1
while left <= right:
middle = (left + right) // 2
if lis[middle] == key:
return '找到了,下标为:%s'%middle
elif lis[middle] > key:
right = middle - 1
else:
left = middle + 1
return '没有找到:%s'%key
key = 14
print(binary(lis,key))