题目描述
给定你一个长度为n的整数数列。
请你使用快速排序对这个数列按照从小到大进行排序。
并将排好序的数列按顺序输出。
输入格式
输入共两行,第一行包含整数 n。
第二行包含 n 个整数(所有整数均在1~109范围内),表示整个数列。
输出格式
输出共一行,包含 n 个整数,表示排好序的数列。
数据范围
1≤n≤100000
样例
输入:
5
3 1 2 4 5
输出:
1 2 3 4 5
算法1
快速排序
基于分治
1.确定分界点:x = q[l],q[(l+r)/2],q[r]
2.调整区间:小于x的在左边,大于等于x的在右边(这步最难最重要)
3.递归处理左右两段
时间复杂度:nlog(n)
python 代码
def quick_sort(q,l,r):
if l >= r:
return
x = q[(l+r)//2] #记住一种满足边界问题的写法
i = l-1
j = r+1
while i<j:
i+=1
while q[i]<x:
i+=1
j-=1
while q[j]>x:
j-=1
if i<j:
q[i],q[j] = q[j],q[i]
quick_sort(q,l,j) #记住一种满足边界问题的写法
quick_sort(q,j+1,r)
if __name__ == "__main__":
n = int(input())
q = list(map(int,input().split()))
quick_sort(q,0,n-1)
for i in range(n):
print(q[i],end = " ")