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的值。


实际使用一个小数据,测试一下,用单步跟踪的方式,看一看在这种写法中,程序运行的每一步,数据是如何变化的,在哪里产生的错误?为什么错了?哪里和自己想象的不一样?进步就发生在这个过程中哦:)


加油!:)

0
0

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11209 学习 · 1617 问题

查看课程