文章

快速排序

快速排序

快速排序

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
31
32
33
34
35
36
37
38
// 链接:https://www.acwing.com/problem/content/787/
#include <bits/stdc++.h>
using namespace std;
/*
快速排序的思想是根据分治处理的
每次将他分解成两个区域,知道区域的长度为1
然后将两个有序区域进行合并
*/
const int N = 1e6+7;
int s[N];
int n;
void qks(int l,int r)
{	
	if(l >= r) return;
    //越界返回
    int i = l - 1, j = r + 1, x = s[l + r >> 1];
    while(i < j)
    {
        do i++; while(s[i] < x);
        do j--; while(s[j] > x);
        if(i < j) swap(s[i], s[j]);
    }
	qks(l,j);
	qks(j+1,r);
}

int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)scanf("%d",&s[i]);
	
	qks(1,n);
	
	for(int i=1;i<=n;i++)printf("%d ",s[i]);
	
	return 0;	
}
//c++调用快排 qsort
本文由作者按照 CC BY 4.0 进行授权