1.冒泡排序
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n-1):
if arr[j] > arr[j+1]: # 判断相邻两个数大小
arr[j], arr[j+1] = arr[j+1], arr[j] # 交换两个数的位置
return arr
2.选择排序
def select_sort(arr):
n = len(arr)
for i in range(n):
min_num = i # 设min_num为最小数的下标
for j in range(i + 1, n):
if arr[min_num] > arr[j]:
min_num = j
arr[i], arr[min_num] = arr[min_num], arr[i] # 找到最小数与i位置的数相互交换
return arr
3.插入排序
def insert_sort(arr):
n = len(arr)
for i in range(1, n):
mark = arr[i]
k = i -1
while k >= 0 and arr[k] > mark:
arr[k+1] = arr[k]
k -= 1
arr[k+1] = mark
return arr
4.快速排序
def quick_sort(arr, start, end):
if start < end:
left = start
right = end
key = arr[start]
else:
return arr
while left < right:
while left < right and key <= arr[right]:
right -= 1
if left < right:
arr[left] = arr[right]
left += 1
while left < right and key > arr[left]:
left += 1
if left < right:
arr[right] = arr[left]
right -= 1
arr[left] = key
quick_sort(arr, start, left-1)
quick_sort(arr, left + 1, end)
return arr
quick_list = my_list[:]
re = quick_sort(quick_list, 0, len(quick_list)-1)
print(re)
5.归并排序
ps: 弄清楚地柜函数原理
def merge_sort(arr):
if len(arr) <= 1:
return arr
median = int(len(arr)/2) # 二分分解
left = merge_sort(arr[:median])
right = merge_sort(arr[median:])
return merge(left, right) # 合并数组
def merge(left, right):
print("进入 merg *****************************")
res = []
i = j = k = 0
while(i < len(left) and j < len(right)):
if left[i] < right[j]:
res.append(left[i])
i += 1
else:
res.append(right[j])
j += 1
res = res + left[i:] + right[j:]
return res
merge_list = my_list[:]
print(merge_sort(merge_list))