算法步骤:1、取最左边元素为基准元素。
2、从右往左,找到一个小于基准元素的位置j,从左往右,找到一个大于基准元素的位置i,交换两个位置的值。
3、若此时i<j依然成立,则重复步骤2。
4、若此时i=j,则说明找到了基准元素的最终位置,将该位置的元素同最左边基准元素进行交换。
注意事项一:第2步中必须保证i<j才进行j--或者i++的操作。
注意事项二:取最左边元素为基准元素则必须先从右边开始查找。若从左边先开始查找,则最后i=j的时候,i所指向的值很可能是大于基准元素的值,这个时候将这个大于基准元 素的值与最左边的元素进行交换显然不对。自己动手模拟一下这种情况就知道了。
代码如下:
void qsort(int a[], int left, int right) {
int i, j, t, temp;
t = a[left];
i = left;
j = right;
if(i>=j) {
return;
}
while(i<j) {
while(a[j]>=t && i<j) {
j--;
}
while(a[i]<=t && i<j) {
i++;
}
if(i<j) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
a[left] = a[i];
a[i] = t;
qsort(a, left, i-1);
qsort(a, i+1, right);
}