基础算法—快速排序

快速排序每次的交换时跳跃式的,每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。

在最坏的情况下,仍可能是相邻的两个数进行了交换,时间复杂度为O(n^{^2})

最好的情况下以及平均时间复杂度为 O(nlog_{2}n)

#include
#include
#include
#include
using namespace std;

//快速排序模板(双指针法) 
void quick_sort(int q[], int l, int r)
{
    if (l >= r) return;//判断左右边界 
    int i = l - 1, j = r + 1, x = q[l + r >> 1];
	//>>就是右移,相当于除2(除2向下取整) 
	//<<就是左移,相当于乘以2
    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(){
	int a[8]={1,2,9,33,66,11,22,55};
	quick_sort1(a,0,7);
	for(int i=0;i<8;i++){
		printf("%d\n",a[i]);
	}
	return 0;
} 

你可能感兴趣的:(算法练习基础篇,蓝桥杯,c++,算法)