[分治]排序|

题目来源: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;	
} 
posted @ 2021-04-10 19:31  unknown_future  阅读(38)  评论(0编辑  收藏  举报