算法思路:
我们首先判断数组是否只有一个元素或没有元素,如果是则直接返回原数组。否则,我们选择一个基准值(这里我们选择数组的第一个元素),并将数组分为两个部分:小于基准值和大于基准值的部分。
接下来,我们将递归地对这两个部分进行快速排序,并将它们与基准值连接在一起,形成新的有序数组。
这里采用了Python的列表推导式来生成两个部分,使代码更加简洁明了。此外,这个算法的最坏时间复杂度为O(n^2),而平均时间复杂度为O(nlogn)。
代码实现:
def quick_sort(arr):# 如果数组只有一个元素或者没有元素,直接返回该数组if len(arr) <= 1:return arrelse:# 选择第一个元素作为基准值pivot = arr[0]# 小于等于基准值的部分less_than_pivot = [x for x in arr[1:] if x <= pivot]# 大于基准值的部分greater_than_pivot = [x for x in arr[1:] if x > pivot]# 对小于等于基准值的部分进行递归排序sorted_less_than_pivot = quick_sort(less_than_pivot)# 对大于基准值的部分进行递归排序sorted_greater_than_pivot = quick_sort(greater_than_pivot)# 将排好序的小于等于基准值的部分、基准值和排好序的大于基准值的部分连接起来return sorted_less_than_pivot + [pivot] + sorted_greater_than_pivotarr = [6, 8, 3, 2, 9, 1, 4, 7, 5]
sorted_arr = quick_sort(arr)
print(sorted_arr)
输出结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
这个算法的核心就是将数组分为小于基准值和大于基准值的两个部分,并递归地对它们进行快速排序。