简介
partition算法用途是:有一个数组array[]和其中任意一个数组元素x,修改数组,将数组中小于x的元素都移到x的左边,将大于x的元素都移动x的右边
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;
}