用python实现快速排序,能够输入数字,并将每一趟的子表的形成采用从两头向中间交替式逼近法;要求每趟中对各子表的操作都相似,可采用递归算法
时间: 2024-10-18 15:20:02 浏览: 21
在Python中,我们可以采用递归的方式来实现快速排序,同时采用从两头向中间交替式逼近的划分策略。这样的方式实际上可以看作是对快速排序的一种改进版本,称为“三路快排”或者“荷兰国旗问题”的解决方案。下面是一个简单的实现:
```python
def partition(arr, low, high):
pivot = arr[low] # 基准值
i = low - 1
j = high + 1
while True:
# 往左寻找第一个大于等于pivot的元素
while arr[i] < pivot and i < high:
i += 1
# 往右寻找第一个小于pivot的元素
while arr[j] > pivot:
j -= 1
# 当i找到大于等于pivot的位置,j找到小于pivot的位置时交换
if i >= j:
break
else:
arr[i], arr[j] = arr[j], arr[i]
arr[i+1], arr[low] = arr[low], arr[i+1]
return i + 1
def quicksort_three_way(arr, low, high):
if low < high:
pivot_index = partition(arr, low, high)
# 分别对左右两个子区间的元素进行递归排序
quicksort_three_way(arr, low, pivot_index - 1)
quicksort_three_way(arr, pivot_index + 1, high)
# 示例
numbers = [3, 6, 8, 1, 2, 10, 4, 5, 7]
quicksort_three_way(numbers, 0, len(numbers) - 1)
print("Sorted array:", numbers)
阅读全文