涉及排序算法:冒泡、选择、归并、快速排序。
def bubble_sort(ls):
"""冒泡排序"""
n = len(ls)
for i in range(n):
for j in range(1, n - i):
if ls[j - 1] > ls[j]:
ls[j - 1], ls[j] = ls[j], ls[j - 1]
return ls
def selection_sort(ls):
"""选择排序"""
n = len(ls)
for i in range(n - 1):
min_index = i
for j in range(i, n):
if ls[j] < ls[min_index]:
min_index = j
ls[min_index], ls[i] = ls[i], ls[min_index]
return ls
def merge_sort(ls):
"""归并排序"""
n = len(ls)
if n <= 1:
return ls
mid = n // 2
left = merge_sort(ls[:mid])
right = merge_sort(ls[mid:])
return merge(left, right)
def merge(left, right):
"""归并排序的辅助函数"""
i = j = 0
result = []
while i < len(left) and j < len(right):
if left[i] <= right[j]:
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1
result += left[i:] + right[j:]
return result
def quick_sort(ls):
"""快速排序"""
n = len(ls)
if n <= 1:
return ls
baseline = ls[0]
left = [ls[i] for i in range(1, len(ls)) if ls[i] < baseline]
right = [ls[i] for i in range(1, len(ls)) if ls[i] >= baseline]
return quick_sort(left) + [baseline] + quick_sort(right)
if __name__ == '__main__':
"""上一句的作用:在被import的时候不会执行这段代码"""
ls = [3, 4, 21, 1, 2, 43, 12, 32, 21, 213, 32, 312]
print(selection_sort(ls))