⬅ 返回

1.题目 链接

给定你一个长度为 n 的整数数列。

请你使用快速排序对这个数列按照从小到大进行排序。

并将排好序的数列按顺序输出。

输入格式

输入共两行,第一行包含整数 n

第二行包含 n 个整数(所有整数均在 1∼109 范围内),表示整个数列。

输出格式

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

数据范围

1≤n≤100000

输入样例:

5
3 1 2 4 5

输出样例:

1 2 3 4 5

2.代码

#include<iostream>
#include<math.h>
#include<algorithm>
using namespace std;
const int N = 1e6+10;
int a[N];
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];
    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;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	quick_sort(a,0,n-1);
	for(int i=0;i<n;i++){
			cout<<a[i]<<" ";
	}
}