此理解基于某个关于快速排序的考试题:
对数组 A=(2,8,7,1,3,5,6,4)用快速排序算法的划分方法进行一趟划分后得到
的数组 A 为( ) (非递减排序, 以最后一个元素为基准元素)。 进行一趟划分的
计算时间为( ) 。
A、 (1,2,8,7,3,5,6,4)
B、 (1,2,3,4,8,7,5,6)
C、 (2,3,1,4,7,5,6,8)
D、 (2,1,3,4,8,7,5,6)
A、 0(1)
B、 0(Ign)
C、 0(n)
D、 0(nlgn)
答案是:C,C
解析过程如下:
原数组:2,8,7,1,3,5,6,4
要以最后一个元素为基准元素。所以我们的目光应该聚集到最后一位,也就是4上面!
2,8,7,1,3,5,6,4
让我们开始排序
首先:4是最后一个元素,第一下查找不需要找右边的数字,因为右边根本没有好吧(〃>皿<)。
来,左边跟我一起看过去~~,所以我们要看的是:2,8,7,1,3,5,6
因为是升序,所以从左往右先找到一个比4大的兄嘚,让我康康是谁!
就是你了,老八:8!,发动技能:终极-奥义之交换术!
于是就成这样了:2,4,7,1,3,5,6,8
然后我们发现,左边已经没有任何一个比4更大的数,所以目光放到右边,也就是7,1,3,5,6,8
敲黑板:注意!现在是右边,右边都是些什么人物,都应该是4的大哥对吧,所以要把4的小弟全部找出来!
要么从左往右,要么从右往左,所以我们从右边倒数第二位开始找。
Σ(⊙▽⊙"a)为什么是倒数第二?因为最后一位我们已经交换过了!
于是发现,老3,你不对劲!换,必须换!
于是就成这样了:2,3,7,1,4,5,6,8
然后我们继续找右边,肿么肥四。竟然没有了?没办法,只有找左边了
左边:2 3 7 1
左边都应该是比4小的,所以我们要找到比四大的,放到右边去(对换位置)
从左往右开始找,发现大哥:老7
换!2,3,4,1,7,5,6,8
继续找左边,我靠,左边竟然没有了。那就康康右边,右边做什么?找比4小的出来!
1,7,5,6,8。。。。
别动别动,说的就是你,1号,出列!
2,3,1,4,7,5,6,8
然后再找,发现无论左边还是右边都符合规则(左边小于基数,右边大于基数!)
第一轮就换完了,得到的结果也就是:2,3,1,4,7,5,6,8。所以选C
如果有理解错的地方,请各位尽情指出,别骂就行。(手动害怕~~~)