# 冒泡排序 升序
# 稳定排序
# 时间复杂度 O(n*n)
# 额外空间复杂度 O(1)
def bubbleSort(arr):
for i in range(len(arr)):
for j in range(len(arr)-1-i):
if arr[j]>arr[j+1]:
arr[j],arr[j+1] = arr[j+1],arr[j]
return arr
# 选择排序 升序
# 不稳定排序
# 时间复杂度 O(n*n)
# 额外空间复杂度 O(1)
def chooseSort(arr):
for i in range(len(arr)):
minTemp = i
for j in range(i+1,len(arr)):
if arr[j]<arr[minTemp]:
minTemp = j
arr[i],arr[minTemp] = arr[minTemp],arr[i]
return arr
# 插入排序 升序
# 稳定排序
# 时间复杂度 O(n*n)
# 额外空间复杂度 O(1)
def insertSort(arr):
for i in range(1,len(arr)):
key = arr[i]
j = i
while j>0 and arr[j-1]>key:
arr[j] = arr[j-1]
j-=1
arr[j] = key
return arr
# 快速排序 升序
# 稳定排序
# 时间复杂度 O(n*logn)
#最后填坑
def quickSort(arr,left,right):
if left>=right:
return arr
low, high= left,right #保留一个传值
key = arr[left]
while left<right:
while left<right and arr[right]>key:
right-=1
arr[left] = arr[right] #此时left 与 right 处的值都等于 ringth
while left<right and arr[left]<key:
left +=1
arr[right] = arr[left]
arr[left] = key #最后填坑
quickSort(arr,low,left-1)
quickSort(arr,left+1,high)
return arr
# #并归排序
def merge_sort(arr):
if len(arr)<=1:
return arr
mid = len(arr)//2
left = merge_sort(arr[:mid])
right = merge_sort(arr[mid:])
return merge(left,right)
def merge(left,right):
res = []
while left and right:
if left[0]<right[0]:
res.append(left.pop(0))
else:
res.append(right.pop(0))
res = res+left+right
return res
if __name__=='__main__':
arr = [1,4,3,6,5,7,2,9,8,0]
arr1 = merge_sort(arr)
print(arr1)