最常问的Python排序算法
1、冒泡排序
#核心算法:选取每个元素,依次跟右边的元素比较。
def my_sort(arr):
if not isinstance(arr,list):
return None
# i控制比较多少轮,最后1个元素可以不比,因此是长度-1
for i in range(len(arr)-1):
# j控制每一轮比较多少次
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
if __name__ == "__main__":
print(my_sort([0,8,2,4,5,1]))
print(my_sort([1,8,2,4,5,1]))
print(my_sort([9,8,2,4,5,1]))
print(my_sort([9,8,2,4,5,1,12]))
2、快速排序
#核心算法:递归。每一次递归选取一个基准,得到left + 基准 + right
def my_quicksort(arr):
"""升序"""
if not isinstance(arr,list):
return None
if len(arr) < 2:
return arr
# 每次都选取第一个元素作为基数
basic_data = arr[0]
left ,right = [],[]
# 遍历时不能包含基数
for i in arr[1:]:
if i >= basic_data:
right.append(i)
else:
left.append(i)
# 即left = [x for x in arr[1:] if x < basic_data]
# 即right = [x for x in arr[1:] if x >= basic_data]
# 递归调用,最后根据列表的加法运算,组装得到排序后的列表
return my_quicksort(left) + [basic_data] + my_quicksort(right)
if __name__ == "__main__":
print(my_quicksort([0,8,2,4,5,1]))
print(my_quicksort([1,8,2,4,5,1]))
print(my_quicksort([9,8,2,4,5,1]))
print(my_quicksort([9,8,2,4,5,1,12]))