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

 

.............................

 

posted @ 2022-05-22 10:23  yzmarcus  阅读(30)  评论(0编辑  收藏  举报