有不懂的算法,自己找点数据去试一遍,跟着代码走一遍,就基本可以弄懂了,这是郝斌老师说的
#include <cstdio>
using namespace std;
void quicksort(int a[], int l, int r)
{
if(l<r){ //终止递归条件: 左边界不小于右边界,即,范围内至少要有两个元素
int i=l, j=r, x=a[l];
//以最左边的元素作为基准,将数组划分为两个区间,左边的数都比x小,右边的数都比x大或等
while(i < j){
while(i<j&&a[j]>=x) j--; //从右向左找第一个小于x的数
if(i<j) a[i++] = a[j]; //把小于x的数交换到左边去
while(i<j&&a[i]<x) i++; //从左到右找第一个大于等于x的数
if(i<j) a[j--] = a[i]; //把大于x的数交换到右边去
}
a[i] = x; //将x归位
//递归调用
quicksort(a, l, i-1); //对左半边排序
quicksort(a, i+1, r); //对右半边排序
}
}
int main(void)
{
int a[] = {7,1,9,10,3,2,6,5,10};
quicksort(a, 0, 8);
for(int i=0; i<9; i++){
printf("%d ", a[i]);
}
return 0;
}