Quicksort này được coi là sắp xếp "v [left] ... v [right] thành thứ tự tăng dần"; sao chép (không có bình luận) từ Ngôn ngữ lập trình C của K & R (Second Edition):Lỗi trong ví dụ quicksort (sách 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);
}
Tôi nghĩ rằng có một lỗi ở
(left + right)/2
Giả sử trái = INT_MAX - 1 và ngay = INT_MAX. Điều này sẽ không dẫn đến hành vi không xác định do tràn số nguyên không?
Nó có lẽ được lập trình với giả định rằng một mảng sẽ không lớn như vậy khi chạy. :) – sarnold
Đó là một giả định rất tốt vì bạn sẽ không có không gian trong bộ nhớ cho chương trình quicksort của bạn –
Xem thêm: http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it -nearly.html –