快速排序中的partition算法

簡介
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;	
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章