为什么要让初始的两个数组为空呢?
来源:3-5 快速排序法 - Quick Sort
松柏i
2019-07-22
int j = l;
// arr[l+1…j] < v ; arr[j+1…i) > v
这样不是不满足条件吗,你为什么说这样是满足条件的呢
写回答
1回答
-
抱歉,我没有理解你的问题。初始的哪两个数组为空?满足什么条件?
或者你觉得课程的代码哪里是有问题的?还是觉得代码实际应该怎样写?
==========
初始的时候,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的增加,这个区间才开始合法(非空)。
所以,初始,这两个区间都是空的,我们给定的任何限定,都是满足的。也就是满足初始条件。
算法后续,要保证,这两个区间中的元素,都一直满足注释中的条件。
继续加油!:)
032019-07-22
相似问题