给定一个整数序列,请按非递减序输出采用快速排序(递归法)的各趟排序后的结果。注意:每趟排序以排序区间的首元素为枢轴(支点)。 输入格式: 测试数据有多组,处理到文件尾。每组测试数据第一行输入一个整数n(1≤n≤100),第二行输入n个整数。 输出格式: 对于每组测试,输出若干行,每行是一趟排序后的结果,每行的每两个数据之间留一个空格。 输入样例: 4 8 7 2 1 6 73 49 98 81 64 55 输出样例: 1 7 2 8 1 7 2 8 1 2 7 8 55 49 64 73 81 98 49 55 64 73 81 98 49 55 64 73 81 98
时间: 2024-03-18 13:42:02 浏览: 195
```python
def quick_sort(start, end):
if start >= end:
return
pivot = nums[start]
left, right = start + 1, end
while left <= right:
while left <= right and nums[left] < pivot:
left += 1
while left <= right and nums[right] >= pivot:
right -= 1
if left <= right:
nums[left], nums[right] = nums[right], nums[left]
left += 1
right -= 1
nums[start], nums[right] = nums[right], nums[start]
print(" ".join(map(str, nums)))
quick_sort(start, right - 1)
quick_sort(right + 1, end)
while True:
try:
n = int(input())
nums = list(map(int, input().split()))
quick_sort(0, n - 1)
except:
break
```
算法思路:
这道题目需要用到快速排序的思想,只是需要在排序的过程中输出每趟排序的结果。
快速排序的关键在于选取枢轴(支点),这里我们选择每次选取排序区间的第一个元素作为枢轴。然后,我们可以使用两个指针 left 和 right 分别从左右两端扫描整个序列,将比枢轴小的元素放在左边,比枢轴大的元素放在右边。接着,将枢轴与 right 指针指向的元素交换位置,这样就完成了一趟排序。最后,我们递归地对左右两个区间进行排序即可。
在每趟排序结束之后,我们只需要输出当前的序列即可。
需要注意的是,由于题目中有多组测试数据,因此我们需要使用 try except 语句对输入进行异常捕获,当读入到文件结尾时,跳出循环。
阅读全文