选取一个枢纽,使它左边的值都比它小,右边的值比它大。(假定选数组第一个元素值)
int Partition(int* array, int low, int high)
{
int pivotkey;
pivotkey = array[low];
while(low < high)
{
while(low < high && array[high] > pivotkey)
high--;
swap(array, low, high);
while(low < high && array[low] < pivotkey);
low++;
swap(array, low, high);
}
return low;
}
pivotkey不断交换,low,high中必有一个是枢纽(low是枢纽时,比较high;当high是枢纽时比较low),从表的两端交替向中间扫描。