双路快排partition中while(true)中止的条件if(i>j)

来源:3-7 双路快速排序法

邹正霖

2020-11-08

if( i > j )
   break;

为什么不是 i >= j 呢?

i >= j
写回答

2回答

qq_漫笔_0

2021-09-15

当 i >= j 时,性能会有一点提升,可有可无。

1.while (i <= r && arr[i] < v) i++ 过滤出的元素是 arr[i] >= v

2.while (j >= l + 1 && arr[j] > v) j-- 过滤出的元素是 arr[j] <= v

当 i == j 时,说明指向同一元素,同时满足 1,2 说明 arr[i] == arr[j] == v

如下序列:

  3 1 5 3 2 4 

  3 4 2 3 5 1

  3 4 5 3 2 1

使用  i >= j 时 break,i == j,跳出循环,此时 l =0,j=3, i=3,arr[j] 和 arr[l] 发生标定点置换操作(这里也可省略)

使用 i > j 时 break, i == j,继续循环(多了一轮循环判断),直到 l=0,j=2,i=4,此时 break,跳出循环,arr[j] 和 arr[l] 发生标定点置换操作




2
0

liuyubobobo

2020-11-08

i >= j 就 break 也是正确的:)


继续加油:)

1
0

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

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

11187 学习 · 1614 问题

查看课程