快速排序算法模板

130 阅读1分钟

1. 思想

2. 代码

#include<iostream>
using namespace std;

const int N = 1e6+10;
int n;
int q[N];

void quick_sort(int a[], int l, int r){
	if(l >=  r)
		return;
		
	//确定分界点
	int x=q[(l+r)/2], i=l-1, j=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(){
	cin >> n;
	for(int i=0; i<n; i++)
		cin >> q[i];
	quick_sort(q, 0, n-1);
	for(int i=0; i<n;i++)
		cout << q[i] << ' ';
	return 0;
}

3. 调试

4. 模板

void quick_sort(int a[], int l, int r){
	if(l >=  r)
		return;
	int x=q[(l+r)/2], i=l-1, j=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);
}