v和arr[l]
来源:3-5 快速排序法 - Quick Sort

Pinesong
2019-07-02
//找到这样的一个索引j,使得arr[l…j-1]<arr[j]和arr[j]<arr[j+1…i)
template
int __partition(T arr[],int l,int r){
T v = arr[l];
int j = l;
for (int i=l+1;i<=r;i++){
//if (arr[i]>v)
//i++;
if (arr[i]<v){
swap( arr[j+1] , arr[i] );
j ++;
}
}
swap(arr[l],arr[j]);
return j;
}
这段程序中,如果swap(v,arr[j]);则无法完成快速排序,这是为什么?v和arr[l]不是等价的吗?
写回答
1回答
-
liuyubobobo
2019-07-03
swap(v,arr[j]) 将v换成了arr[j]的值;arr[j]的值换成了v的值。但是arr[l]的值没有变。
我们在这步交换中,要改变arr[l]的值,而不是v的值。
实际使用一个小数据,测试一下,用单步跟踪的方式,看一看在这种写法中,程序运行的每一步,数据是如何变化的,在哪里产生的错误?为什么错了?哪里和自己想象的不一样?进步就发生在这个过程中哦:)
加油!:)
00
相似问题