有一个序列: ( 66,13,51,76,81,26,57,69,23)
以第一个元素为基准,那么第一次的划分后的结果是?
66为基准,比他小的放左边,大的放右边,
那就是:13放66左边,结果:13,66
51放55的左边,结果是:51,13,66
76放66的右边,结果是:51,13,66,76.....
23 13 51 57 26 66 81 69 76
先把66用临时变量存储起来,这样66所在的位置便空了出来,然后从右边找,发现23小于66,于是把23放在空出的位置,23原来所在位置空出,然后从左边开始找,找到比66大的数放在空出的位置,以此类推.。。。知道两边找的位置重合 ,最后再把66放回空位,一次划分完成
1)、设置两个变量I、J,排序开始的时候I:=1,J:=N;
2)以第一个数组元素作为关键数据,赋值给X,即X:=A[1];
3)、从J开始向前搜索,即由后开始向前搜索(J:=J-1),找到第一个小于X的值,两者交换;
4)、从I开始向后搜索,即由前开始向后搜索(I:=I+1),找到第一个大于X的值,两者交换;
5)、重复第3、4步,直到I=J;
23,13,51,76,81,26,57,69,66
23,13,51,66,81,26,57,69,76,
23,13,51,57,81,26,66,69,76,
23,13,51,57,66,26,81,69,76,
23,13,51,57,26,66,81,69,76,
然后再从以23为基准
|
|