# 冒泡排序,时间复杂度为O(n^2),空间复杂度为O(1),稳定defbubble_sort(arr):for i inrange(len(arr)):for j inrange(len(arr)-1-i):if arr[j]> arr[j+1]:
arr[j], arr[j+1]= arr[j+1], arr[j]return arr
# 选择排序,时间复杂度为O(n^2),空间复杂度为O(1),不稳定defselection_sort(arr):for i inrange(len(arr)):
min_index = i
for j inrange(i+1,len(arr)):if arr[j]< arr[min_index]:
min_index = j
arr[min_index], arr[i]= arr[i], arr[min_index]return arr
# 插入排序,时间复杂度为O(n^2),空间复杂度为O(1),稳定definsertion_sort(arr):for i inrange(1,len(arr)):
cur = arr[i]
pre_index = i-1while pre_index >=0and arr[pre_index]> cur:
arr[pre_index +1]= arr[pre_index]
pre_index -=1
arr[pre_index+1]= cur
return arr
# 希尔排序,最坏时间复杂度为O(n^2),平均时间复杂度为O(n^1.3),空间复杂度为O(1),不稳定defshell_sort(arr):
gap =len(arr)//2while gap >0:for i inrange(gap,len(arr)):
cur = arr[i]
j = i
while j - gap >=0and cur < arr[j-gap]:
arr[j]= arr[j-gap]
j -= gap
arr[j]= cur
gap //=2return arr
# 归并排序,时间复杂度为O(nlog(n)),空间复杂度为O(n),稳定defmerge_sort(arr):iflen(arr)==1:return arr
mid =len(arr)//2return merge(merge_sort(arr[:mid]), merge_sort(arr[mid:]))# 本质就是合并两个有序数组defmerge(left, right):
res =[]whilelen(left)>0andlen(right)>0:if left[0]<= right[0]:
res.append(left.pop(0))else:
res.append(right.pop(0))
res += left
res += right
return res
# 快速排序defquick_sort(arr):# 堆排序# 桶排序