#插入排序算法
def insert_sort(lst):
for i in range(1,len(lst)): #开始时片段[0:1]已排序
# print(i)
x = lst[i]
j = i
while j > 0 and lst[j-1] > x:
lst[j] = lst[j-1] #反序逐个后移元素,确定插入位置
j -= 1
lst[j] = x
print(lst)
insert_sort([2,3,1,4,5])
#选择排序算法
def select_sort(lst):
for i in range(len(lst) - 1): #只需要循环len(lst) - 1次
k = i
for j in range(i,len(lst)): # k是已知最小元素的位置 这个循环就是把最小元素k找出来
if lst[j] < lst[k]:
k = j
if i != k: #lst[k] 是确定的最小元素,检查是否需要交换
lst[i],lst[k] = lst[k],lst[i]
print(lst)
select_sort([3,2,4,1,5])
#冒泡(交换)排序算法
def bubble_sort(lst):
for i in range(len(lst)):
found = False
for j in range(1,len(lst) - i):
if lst[j-1] > lst[j]:
lst[j-1],lst[j] = lst[j],lst[j-1]
found = True
if not found:
break
print(lst)
bubble_sort([30,13,25,16,47,26,19,10])
#快速排序 20世纪最具影响力的算法之一
def quick_sort(lst):
qsort_rec(lst,0,len(lst)-1)
# print(lst)
def qsort_rec(lst,l,r):
if l >= r:
return #分段无记录 或只有一个记录 只有一个数值的时候 下面就不进行了
i = l
j = r
pivot = lst[i] #是初始空位
while i < j: #找pivot的最终位置
while i < j and lst[j] >= pivot: #最后一个和第一个进行比较 后面大则 进行下去
j -= 1 #用j向左扫描小于pivot的记录
if i < j:
lst[i] = lst[j]
i += 1 #小记录移动到左边
print(lst)
while i < j and lst[i] <= pivot:
i += 1 #用i向右扫描找大于pivot的记录
if i < j:
lst[j] = lst[i]
j -= 1 #大记录移到右边
print(lst)
lst[i] = pivot #将pivot存入其最终位置
# print(lst)
qsort_rec(lst,l,i-1) #递归处理左半区间
qsort_rec(lst,i+1,r) #递归处理右半区间
# quick_sort([30,13,25,16,47,26,19,10])
quick_sort([4,3,5,1,2])
复制代码