在快速排序法中,选择基准数为列表中间的元素,按照快速排序法的原理,编写函数实现这种形式的快速排序
时间: 2024-12-23 20:23:55 浏览: 12
在快速排序算法中,选择基准数(pivot)通常是将数组分为两个部分的关键步骤。如果选用中间元素作为基准,其步骤大致可以如下:
```python
def quicksort_middle(lst):
if len(lst) <= 1:
# 如果列表只有一个元素或为空,无需排序,直接返回
return lst
# 找到列表长度的一半作为基准索引
mid = len(lst) // 2
pivot_index = mid - 1 # 因为我们需要比较的是元素值,而不是索引,所以减一
# 将基准元素移动到序列的最后
lst[pivot_index], lst[-1] = lst[-1], lst[pivot_index]
# 定义两个指针,i指向开始,j指向结束
i = 0 # 用于查找小于基准的元素的左侧边界
j = len(lst) - 2 # 用于查找大于等于基准的元素的右侧边界
while i < j:
# 当左侧指针i找到一个大于等于基准的元素,向右移动i
while i < j and lst[i] >= lst[pivot_index]:
i += 1
# 当右侧指针j找到一个小于基准的元素,向左移动j
while i < j and lst[j] < lst[pivot_index]:
j -= 1
# 交换i和j处的元素,保证较小的元素在左边,较大的在右边
lst[i], lst[j] = lst[j], lst[i]
# 最后把基准元素放到它最终的位置(即i位置)
lst[i + 1], lst[-1] = lst[-1], lst[i + 1]
# 对左右两部分递归地进行快速排序
left_half = lst[:i+1]
right_half = lst[i+2:]
return quicksort_middle(left_half) + [lst[i+1]] + quicksort_middle(right_half)
# 示例:
unsorted_list = [9, 5, 6, 8, 2, 7, 1, 3, 4]
sorted_list = quicksort_middle(unsorted_list)
print(sorted_list)
阅读全文