[分治]排序|
题目来源:sslOJ
题面
解析
对于一个长度为\(n\)的序列,进行一次从小到大的排序,再进行输出
排序我们考虑快速排序.
快速排序介绍
Code
#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
int n;
int a[100005];
void hhd (int l, int r)
{
if (l >= r) return ;
int i = l, j = r;
int key = a[(l + r) / 2];
do
{
while (a[i] < key) ++ i;
while (a[j] > key) -- j;
if (i <= j)
{
swap (a[i], a[j]);
++ i; -- j;
}
} while (i <= j);
hhd (l, j);
hhd (i, r);
}
int main ()
{
scanf ("%d", &n);
for (int i = 1; i <= n; ++ i) scanf ("%d", &a[i]);
hhd (1, n);
for (int i = 1; i <= n; ++ i) printf ("%d ", a[i]);
return 0;
}