初闻快排
快排是排起来速度快?还是写起来很简单?
快排的时间复杂度为LogN,时间并不是常数级的,所以它并不是最快的。为什么叫快排,我估计在排序算法刚出来的时候,一般像冒泡、插入这些,都是N的平方级。因此所以起名为快排 。
快排写起来并不简单,相对于基础算法,比较复杂。那复杂到哪里了?
快排使用的是分治思想:先分再排,排好一轮再分。一般使用递归来进行实现
分治思想,将一个大块分成小块,再对这些小块进行治理。
而快排,就像军训的时候,排成一排。我们想让它按从小到大排,我们选取了一个人,比他高的,往右站;比他矮的,往左站。现在就变成了三个队伍,一个是左边队伍,一个是作为基准的他,一个是右边队伍,这个基准就不用管了,放到中间。而两边继续选取基准,再按基准排列。到了每队只剩下一个人的时候,说明已经排完了队。
代码
这是代码的实现,但要有注意事项:
1.大while()循环中,一定要left!=rgiht。或者是left<right。
2.left和right找数值是有顺序的,如果返回的是left,一定要先
再
不然,值会被覆盖。