這個快速排序應該按照升序排列「v [left] ... v [right]」;從C程序設計語言複製(沒有評論)的K & R(第二版):快速排序示例中的錯誤(K&R C書)?
void qsort(int v[], int left, int right)
{
int i, last;
void swap(int v[], int i, int j);
if (left >= right)
return;
swap(v, left, (left + right)/2);
last = left;
for (i = left+1; i <= right; i++)
if (v[i] < v[left])
swap(v, ++last, i);
swap(v, left, last);
qsort(v, left, last-1);
qsort(v, last+1, right);
}
我覺得有一個錯誤在
(left + right)/2
假設左= INT_MAX - 1,右= INT_MAX。這不會由於整數溢出而導致未定義的行爲嗎?
它可能是在假設數組在運行時不會很大的情況下編程的。 :) – sarnold
這是一個非常好的假設,因爲您的快速排序程序沒有內存空間 –
另請參閱:http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it -nearly.html –