我检查了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);
}