在start,end 之间,获取一个数作为参照,大于这个数的,放在右边,小于的放在左边。
最后,返回排序好的新数组中,此参照数的位置。
然后再递归的调用此方法,排序左边和右边的数组。
直至 start = end;
int partition(int start, int end)
{
int mid, i, temp;
int nl, nr;
temp = a[start];
nl = start;
nr = end;
if(start >= end){
return 0;
}
while(nl < nr){
while(temp <= a[nr] && nr > nl){
nr--;
}
if(nr > nl){
a[nl++] = a[nr];
}
while(a[nl] <= temp && nl < nr){
nl++;
}
if(nr > nl){
a[nr--] = a[nl];
}
}
a[nl] = temp;
mid = nl;
return mid;
}
![](http://img.zemanta.com/pixy.gif?x-id=52ec06c4-830b-80c7-8c70-1ed69b129964)