对n个元素进行快速排序
快速排序是一种分治的排序算法,其基本思想是通过一趟排序将待排序的元素分割成独立的两部分,其中一部分的所有元素都小于另一部分的所有元素,然后再对这两部分分别进行快速排序,最终将整个序列排序。
具体步骤如下:
- 选择一个基准元素pivot,可以选择第一个元素、最后一个元素、随机元素等。
- 设定两个指针i和j,分别指向序列的起始位置和末尾位置。
- 从j开始向前搜索,找到第一个小于pivot的元素,将其与arr[i]交换,然后i右移一位。
- 从i开始向后搜索,找到第一个大于pivot的元素,将其与arr[j]交换,然后j左移一位。
- 重复步骤3和步骤4,直到i和j相遇。
- 将pivot元素放到相遇的位置,此时pivot左边的元素都小于pivot,右边的元素都大于pivot。
- 递归地对pivot左边的子序列和右边的子序列进行快速排序。
下面是一个示例代码实现:
def quick_sort(arr, left, right):
if left < right:
pivot_index = partition(arr, left, right)
quick_sort(arr, left, pivot_index - 1)
quick_sort(arr, pivot_index + 1, right)
def partition(arr, left, right):
pivot = arr[left] # 选择第一个元素作为基准元素
i = left
j = right
while i < j:
while i < j and arr[j] >= pivot:
j -= 1
arr[i] = arr[j]
while i < j and arr[i] <= pivot:
i += 1
arr[j] = arr[i]
arr[i] = pivot
return i
arr = [3, 1, 4, 2, 5]
quick_sort(arr, 0, len(arr) - 1)
print(arr) # 输出 [1, 2, 3, 4, 5]
快速排序的平均时间复杂度为O(nlogn),最坏情况下为O(n^2)
原文地址: https://www.cveoy.top/t/topic/ifOl 著作权归作者所有。请勿转载和采集!