五分钟解决算法问题:快速排序(c++)

    首先要知道数组从大到小排列的充分必要条件:对于数组中任一个数,比它小的数在它左侧,比它大的数在右侧。那么我们只需将数组进行如下操作:

1.分解

    以a[p]为基准,将比它小的移在a[p]后面  ,比它大的都放在a[p]的后面的后面。

如下图:


    然后将比a[p]小的最后一个数与a[p]交换位置。


2.递归

    将比a[p]小的数用以上步骤排序。

    将比a[p]大的数用以上步骤排序。

用一个数组举例:

      五分钟解决算法问题:快速排序(c++)_第1张图片

以上步骤可以分解为:

    1.以3为基准,将比3小的移在3后面  ,比3大的都放在3的后面的后面。

     2.将左半段按以上步骤排序。(递归。以2为基准后又以1为基准.......)

     2.将右半段按以上步骤排序。(递归。以6为基准后又以5或4,5或4为基准.......)


源代码:

3,7,2,6,5,4,8,1 为例:

#include
#include
using namespace std;
int Partition(int a[],int p,int r){
	int i = p,j = r+1;
	int x = a[p];
	while(true){
		while(a[++i]x);//a[j]比3小 
		if(i


输出结果:


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