Acwing--快速排序

模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void Quick_sort(int q[],int l,int r)
{
if(l>=r)
return;
int i=l-1,j=r+1,x=q[l];
while(i<j)
{
do i++;while(q[i]<x);
do j--;while(q[j]>x);
if(i<j)
swap(q[i],q[j]);
}
Quick_sort(q,l,j);
Quick_sort(q,j+1,r);
}

给定你一个长度为n的整数数列请你使用快速排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。

输入:

输入共两行,第一行包含整数 n。第二行包含 n 个整数(所有整数均在1~109范围内),表示整个数列。

输出:

输出共一行,包含 n 个整数,表示排好序的数列。

数据范围

1≤n≤100000

样例输入:

1
2
5
3 1 2 4 5

样例输出:

1
1 2 3 4 5

思路:快速排序

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <bits/stdc++.h>
using namespace std;
const int Max=1e6+10;
int q[Max];
void Quick_sort(int q[],int l,int r)
{
if(l>=r)
return;
int i=l-1,j=r+1,x=q[l + r >> 1]; //l+r>>1相当于(l+r)/2取整
while(i<j)
{
do i++;while(q[i]<x);
do j--;while(q[j]>x);
if(i<j)
swap(q[i],q[j]);
}
Quick_sort(q,l,j);
Quick_sort(q,j+1,r);
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&q[i]);
Quick_sort(q,0,n-1); //注意为0-n-1
for(int i=0;i<n;i++)
printf("%d ",q[i]);
return 0;
}
小礼物走一个哟
0%