Peter算法小课堂—快速排序

快速排序这个名字为什么取得这么自信呢,下面就由Peter来带你们一探究竟吧!

快速排序

可视化网址:Sorting (Bubble, Selection, Insertion, Merge, Quick, Counting, Radix) - VisuAlgo

算法图片:

Peter算法小课堂—快速排序_第1张图片算法思路:我们要把一个无序的数组排序。先随机选一个基准数,不妨设为x,然后我们将这个数组分成两组,一组的数大于等于x,另一组小于等于x。然后一直分下去,直到这个组只有一个数为止。整个程序需要双游标来实现。 

如何进行双游标:左游标i右移,直到发现可以放入右部分的元素。右游标j左移,直到发现可以放入左部分的元素,左右游标相遇时结束。

分组代码:

int partition(int a,int b){
	int pivot=x[(a+b)/2];
	int i=a-1,j=b+1;
	while(1){
		while(x[++i]pivot);
		if(i>=j) return j;
		swap(x[i],x[j]);
	}
}

递归代码:

void qsort(int a,int b){
	if(a>=b) return;
	int p=partition(a,b);
	qsort(a,p);
	qsort(p+1,b);
}

还没理解的话,给大家看几张图片

Peter算法小课堂—快速排序_第2张图片

希望这些对大家有用,三连必回。 

你可能感兴趣的:(排序算法)