四种常见排序算法(快速,冒泡,插入,选择排序)
#插入排序算法 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])