【发布时间】:2015-12-04 17:23:20
【问题描述】:
我对这部分代码有疑问(粗体):
/* swap: interchange v[i] and v[j] */
void swap(int v[], int i, int j)
{
int temp;
temp = v[i];
v[i] = v[j];
v[j] = temp;
}
/* qsort: sort v[left]...v[right] into increasing order */
void qsort(int v[], int left, int right)
{
int i, last;
if (left >= right) /* do nothing if array contains */
return; /* fewer than two elements */
swap(v, left, (left + right)/2); /* move partition elem */
last = left; /* to v[0] */
for (i = left + 1; i <= right; i++) /* partition */
if (v[i] < v[left])
swap(v, ++last, i);
swap(v, left, last); /* restore partition elem */
qsort(v, left, last-1);
qsort(v, last+1, right);
}
我不明白的部分是:
last = left; /* to v[0] */
for (i = left + 1; i <= right; i++) /* partition */
if (v[i] < v[left])
swap(v, ++last, i);
所以如果left 初始化为0。所以last 将等于零。
然后在 for 循环中,i 等于 1 并且如果:
if (v[i] < v[left])
然后
swap(v, ++last, i);
但是这种交换的意义在哪里? last 在传递给带有预增量的函数时不会变成1 吗?所以++last == i == 1?
【问题讨论】: