法一:
b站上的视频课学的,运用了快排的基本概念。
'''n为1000时,递归深度太大不支持'''
def quick_sort(date, left, right):
if left < right:
mid = partition(date, left, right)
quick_sort(date, left, mid - 1)
quick_sort(date, mid + 1, right)
def partition(date, left, right):
tmp = date[left]
while left < right:
while left < right and date[right] >= tmp:
right -= 1
date[left] = date[right]
while left < right and date[left] <= tmp:
left += 1
date[right] = date[left]
date[left] = tmp
return left
def main():
l = 0
r = n - 1
quick_sort(data, l, r)
if __name__ == "__main__":
n = int(input())
data = [int(x) for x in range(1000)]
main()
print(' '.join(list(map(str, data))))
法二:
AcWing上的,通过python复刻y总的c++代码,运用了二分
def quick_sort(l, r, data):
if l >= r:
return
i = l - 1
j = r + 1
pivot = data[(i + j) // 2]
while i < j:
while 1:
i += 1
if data[i] >= pivot:
break
while 1:
j -= 1
if data[j] <= pivot:
break
if i < j:
data[i], data[j] = data[j], data[i]
quick_sort(l, j, data)
quick_sort(j + 1, r, data)
def main():
l = 0
r = n - 1
quick_sort(l, r, data)
if __name__ == "__main__":
n = int(input())
data = [int(x) for x in input().split()]
main()
print(' '.join(list(map(str, data))))