输入样例:
5
3 1 2 4 5
输出样例:
1 2 3 4 5
代码:
def quicksort(nums, i, j):
if i >= j: # 如果数组长度为0或1,直接返回
return # 仅表示终止函数,相当于return None
low, high = i, j
pivot = nums[(i + j) // 2] # 地板除
while low <= high:
while low <= high and nums[low] < pivot: # 找到一个小于pivot的数
low += 1
while low <= high and nums[high] > pivot: # 找到一个大于pivot的数
high -= 1
if low <= high:
nums[low], nums[high] = nums[high], nums[low] # 交换这两个前面找到的数,交换过后,也不要忘了low和high的值要改变
low += 1
high -= 1
quicksort(nums, i, high)
quicksort(nums, low, j)
if __name__ == '__main__':
n = int(input())
array = [int(v) for v in input().split()]
quicksort(array, 0, n - 1)
for i in array:
print(i, end=' ')
成功AC
写了这道题才知道,之前数据结构课上学的快速排序我记错了(考试当然也写错了)。
它是每一轮左右两边要各找到一个数再进行交换,而不是一边找到就交换。