defbubble_sort(A):
n =len(A)for j inrange(n-1):
count =0#记录是否有数据进行交换,如果后续没有数据进行交换则认为是有序的就直接退出函数for i inrange(n-1-j):if A[i]> A[i+1]:
A[i], A[i+1]= A[i+1], A[i]
count +=1if count ==0:returnif __name__ =='__main__':
data =[54,26,93,17,77,31,44,55,20]print(data)
bubble_sort(data)print(data)
2.选择排序
defselect_sort(A):
n =len(A)for j inrange(n-1):
min_index = j
for i inrange(j+1, n):if A[min_index]> A[i]:
min_index = i
A[j], A[min_index]= A[min_index], A[j]if __name__ =='__main__':
data =[54,26,93,17,77,31,44,55,20]print(data)
select_sort(data)print(data)
3.插入排序
definsert_sort(A):
n =len(A)for j inrange(1, n):#认为左侧第一个是有序的,所以从第二个开始取
i = j #从右侧取一个无序元素while i >0:if A[i]< A[i-1]:
A[i], A[i-1]= A[i-1], A[i]
i -=1else:breakif __name__ =='__main__':
data =[54,26,93,17,77,31,44,55,20]print(data)
insert_sort(data)print(data)
4.希尔排序(带间隔的插入排序)
defshell_sort(A):
n =len(A)
gap = n//2while gap >0:for j inrange(gap, n):
i = j
while i>0:if A[i]< A[i - gap]:
A[i], A[i-gap]= A[i-gap], A[i]
i -= gap
else:break
gap //=2if __name__ =='__main__':
data =[54,26,93,17,77,31,44,55,20]print(data)
shell_sort(data)print(data)
5.快速排序
defquick_sort(A,first, last):if first >= last:return
mid_value = A[first]
low = first
high = last
while low < high:while low < high and A[high]>= mid_value:
high -=1
A[low]= A[high]while low < high and A[low]< mid_value:
low +=1
A[high]= A[low]
A[low]= mid_value #low = high
quick_sort(A, first, low -1)#递归
quick_sort(A, low +1, last)if __name__ =='__main__':
data =[54,26,93,17,77,31,44,55,20]print(data)
lens =len(data)
quick_sort(data,0, lens-1)print(data)
6.归并排序
defmerge_sort(A):
n =len(A)if n <=1:return A
mid = n //2
left_A = merge_sort(A[:mid])#左右拆分
right_A = merge_sort(A[mid:])
left_pointer, right_pointer =0,0
result =[]#额外的列表空间while left_pointer <len(left_A)and right_pointer <len(right_A):if left_A[left_pointer]< right_A[right_pointer]:
result.append(left_A[left_pointer])
left_pointer +=1else:
result.append(right_A[right_pointer])
right_pointer +=1
result += left_A[left_pointer:]#将排好序的剩余元素插入result
result += right_A[right_pointer:]return result
if __name__ =='__main__':
data =[54,26,93,17,77,31,44,55,20]print(data)
lens =len(data)
datas = merge_sort(data)print(datas)