1
我想了解quicksort機制,但到目前爲止我無法弄清楚。根據維基百科,步驟如下:C++ QuickSort not clear
1.從列表中選取一個稱爲數據透視表的元素。
2.重新排序列表,以便其值小於樞軸的所有元素的支點來之前,同時與價值比支點來後,更大的所有元素(等於值可以去任何一種方式)。分區之後,樞軸處於最終位置。這被稱爲分區操作。
3.將上述步驟遞歸地應用於具有較小值的元素的子列表,以及分別具有較大值的元素的子列表。
這是代碼:
int partition(int arr[], int left, int right)
{
int i = left, j = right;
int tmp;
int pivot = arr[(left + right)/2];
while (i <= j) {
while (arr[i] < pivot)
i++;
while (arr[j] > pivot)
j--;
if (i <= j) {
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
}
return i;
}
void quickSort(int arr[], int left, int right) {
int index = partition(arr, left, right);
if (left < index - 1)
quickSort(arr, left, index - 1);
if (index < right)
quickSort(arr, index, right);
}
所有,除了一件事不知何故我清楚。爲什麼分區函數返回i
而不是j
?
這可能取決於你把樞軸哪個組返回任何一個 – 2013-03-12 19:45:55
如果我把''復位J;''而不是''回報我;'',數組' '{3,2,4,1}''程序崩潰 – Teo 2013-03-12 19:47:23
@Theo .:這是因爲你在那裏的'quickSort'函數期望'partition'返回第二個分區的第一個元素的索引。改變它以期望最後一個元素的索引將是一個非常微不足道的變化。 – 2013-03-12 19:53:54