我檢查了K & R書中的快速排序代碼,2小時後我仍然無法理解第一個交換(swap(a, left, (left+right)/2);
)實現的效果。我試圖刪除它,排序仍然有效。 有人可以解釋嗎?這是一個性能問題?如果是這樣,爲什麼?這個動作對我來說似乎是隨機的(就是說,在一些數字上它會提高性能,而在某些情況下則不會)。K&R快速排序代碼
謝謝。
void qsort(int a[], int left, int right)
{
int i, last;
if (left >= right)
return;
swap(a, left, (left+right)/2);
last = left;
for (i = left + 1; i <= right; i++)
if(a[i] < a[left])
swap(a, ++last, i);
swap(a, left, last);
qsort(a, left, last-1);
qsort(a, last+1, right);
}