快速排序模板

快排是一种不稳定的排序算法,但其平均时间复杂度是(O(nlog_2n)),最坏情况为(O(n^2)),所以该排序方法被认为是目前最好的一种内部排序方法。
话说(sort)不香吗

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
inline void read(int &x){
	int f=1;
	char ch=getchar();
	x=0;
	while(ch<'0'||ch>'9'){
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x=x*10+ch-'0';
		ch=getchar();
	}
	x*=f;
}
int n;
int a[100001];
inline void quick_sort(int l,int r){
	int i=l,j=r;
	int mid=a[(l+r)/2];	//取中间数为基准数 
	do{
		while(a[i]<mid) i++;	//找左半部分比mid小的数 
		while(a[j]>mid) j--;	//找右半部分比mid大的数 
		if(i<=j){	//如果有一组不符合要求 
			swap(a[i],a[j]);	//交换 
			i++,j--;
		}
	}while(i<=j);	//"=" 
	if(l<j) quick_sort(l,j);	//搜索左半部分 
	if(i<r) quick_sort(i,r);	//搜索右半部分 
}
int main(){
	read(n);
	for(int i=1;i<=n;i++) read(a[i]);
	quick_sort(1,n);
	for(int i=1;i<=n;i++) printf("%d ",a[i]);
	return 0;
}
原文地址:https://www.cnblogs.com/-pwl/p/13719933.html