快速排序

    快排的主要思想是基于分治
    1.确定分界点 : 有几种取法: 左边界q[l]、中间值q[l + r >> 1]、右边界 q[r]、随机
    2.调整区间: 使得区间内小于等于分界点数的位于分界点左边,大于等于分界点的在分界点右边
    3.递归 处理分界点左右两个区间重复1.和2.两步,直至区间 l > r

#include<iostream>

using namespace std;

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

void quick_sort(int q[], int l, int r){
	if(l >= r)
		return; 
	int i = l - 1, j = r + 1, x = q[l];
	while(i < j)
	{
		do i ++ ; while(q[i] < x); // 这边会先执行 i++ 决定了 前面 i= l - 1;
		do j -- ; while(q[j] > x);
		if(i < j)
		{
			int temp = q[i];
			q[i] = q[j];
			q[j] = temp;	
		}	
	}
	quick_sort(q, l, j);
	quick_sort(q, j + 1, r);
}


int main()
{
	scanf("%d", &n);
	for(int i = 0; i < n; i ++){
		scanf("%d", &q[i]);
	}	
	
	quick_sort(q, 0, n - 1);
	
	for(int i = 0; i < n; i ++)
		printf("%d ", q[i]);
}

 

posted @ 2022-02-03 17:07  我就一水  阅读(85)  评论(0)    收藏  举报