def quick_sort(arr):
"""
快速排序(二分法遞歸排序)
原理:取數組第一個數作爲標誌,小於它的所有數放在一個列表,大於等於它的放在另一個列表,然後遞歸處理這兩個數組。
遞歸過程中會把列表越分越小,最小的列表中只包含一個數(二分法思想),小列表排好序後組合成一個列表即可。
時間複雜度:O(nlogn)
:param arr:
:return:
"""
if len(arr) > 1:
left, right = [], []
# 確定一個數,把所有小於它的數放在一個數組,把大於等於它的數放在一個數組
for i in arr[1:]:
if i < arr[0]:
left.append(i)
else:
right.append(i)
return quick_sort(left) + [arr[0]] + quick_sort(right) # 遞歸
else:
return arr
if __name__ == '__main__':
import numpy
array = list(numpy.random.randint(0, 50, 20))
print(array)
# [0, 20, 0, 45, 36, 10, 20, 27, 33, 32, 47, 40, 16, 11, 3, 37, 19, 49, 41, 3]
print(quick_sort(array))
# [0, 0, 3, 3, 10, 11, 16, 19, 20, 20, 27, 32, 33, 36, 37, 40, 41, 45, 47, 49]
Mr.bai