partition算法用途是:有一個數組array[]和其中任意一個數組元素x,修改數組,將數組中小於x的元素都移到x的左邊,將大於x的元素都移動x的右邊
返回值: 返回值爲最終x在數組中的索引值。
void swap(int *x, int *y)
{
int tmp;
tmp = *x;
*x = *y;
*y = tmp;
}
int partition(int array[], int start, int end)
{
int flag; /*標記要進行交換的比x要大的數組索引值*/
int x; /*參考值x*/
int index;
//int x_index;
/*參考值x可取array中的任意一個值,然後與array[end]交換,這裏直接去array[end]作爲x*/
//x_index = rand();
//x = array[x_index];
//swap(&array[x_index],&array[end]);
x = array[end];
flag = start - 1;
/*1.如果數組元素大於等於x,則只是index向上增加
*2.如果數組元素比x要小,則先增加flag索引值,然後判斷flag是否與index相等,如果不相等,則交換flag與index對應的數組元素
* 其中flag表示的是大於x的數組元素索引,index代表的是小於x的數組元素索引*/
for(index = 0; index < end; index++) {
if(array[index] < x) {
flag++;
if(flag != index)
swap(&array[flag],&array[index]);
}
}
flag++;
swap(&array[flag],&array[end]);
return flag;
}