为什么要让初始的两个数组为空呢?

来源:3-5 快速排序法 - Quick Sort

松柏i

2019-07-22

int j = l;
// arr[l+1…j] < v ; arr[j+1…i) > v
这样不是不满足条件吗,你为什么说这样是满足条件的呢

写回答

1回答

liuyubobobo

2019-07-22

抱歉,我没有理解你的问题。初始的哪两个数组为空?满足什么条件?


或者你觉得课程的代码哪里是有问题的?还是觉得代码实际应该怎样写?


==========


初始的时候,j = l。

注释中的第一个区间,arr[l+1..j] 就是arr[l + 1, l]。这个表示,相当于这个区间的左边界,比右边界还大(好比是arr[1..0]的样子)。这不是一个合法的区间。所以说这个区间初始是空的。后续算法,随着j的增加,这个区间才开始合法。


初始的时候,i = l + 1,而 j = l,带入arr[j + 1, i)中,就是 arr[l + 1, l + 1)。

注意,这个区间是前闭后开的,左右边界一样,但前闭后开,所以,这个区间也是空的(好比arr[1,1)的样子)。后续算法,随着i的增加,这个区间才开始合法(非空)。


所以,初始,这两个区间都是空的,我们给定的任何限定,都是满足的。也就是满足初始条件。

算法后续,要保证,这两个区间中的元素,都一直满足注释中的条件。


继续加油!:)


0
3
松柏i
非常感谢!
2019-07-22
共3条回复

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

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

11187 学习 · 1614 问题

查看课程