14.1:荷兰国旗问题:分2区域
14.1:荷兰国旗问题:分2区域
有数组arr[ L ...R ],给你一个数X, 拿X去划分数组
1:分2区域、<=X 放左边, >X放右边
2:分3区域、<X 放左边,X放中间, >X放右边
再划分后的区域内,不要求一定有序。
要求不用辅助数组,时间复杂度O(N)
1、当前数<=目标,当前数和(<=区)下一个数交换,<=区向右括
2、当前数>目标,当前数跳下一个
例子:
<=区域) [ 2, 1, 5, 4, 6, 3, 7, 0 ] 目标数=4
R=-1 i=0
i=0时,当前数=2,小于目标数4,[当前数和(<=区)下一个数交换] 2和2交换没动,<=区向右括把2 包括进来,当前数跳下一个
[ <=区域 2 )1, 5, 4, 6, 3, 7, 0 ] 目标数=4
R=0 i=1
i=1时,当前数=1,小于目标数4,[当前数和(<=区)下一个数交换]1和1交换没动,<=区向右括把1包括进来,当前数跳下一个
[ <=区域 2 , 1) 5, 4, 6, 3, 7, 0 ] 目标数=4
R=1 i=2
i=2时,当前数=5,大于目标数4,当前数跳下一个
[ <=区域 2 , 1) 5, 4, 6, 3, 7, 0 ] 目标数=4
R=1 i=3
i=3时,当前数=4,小于等于目标数4,[当前数和(<=区)下一个数交换]4和5交换,<=区向右括把4包括进来,当前数跳下一个
[ <=区域 2 , 1, 4) 5, 6, 3, 7, 0 ] 目标数=4
R=2 i=4
i=4时,当前数=6,大于目标数4,当前数跳下一个
[ <=区域 2 , 1, 4) 5, 6, 3, 7, 0 ] 目标数=4
R=2 i=5
i=5时,当前数=3,小于等于目标数4,[当前数和(<=区)下一个数交换]3和5交换,<=区向右括把3包括进来,当前数跳下一个
[ <=区域 2 , 1, 4, 3), 6, 5, 7, 0 ] 目标数=4
R=3 i=6
.............................