java笔记(2)-快速排序
什么是快速排序
快速排序是一种效率很高的排序方式,假设对于某一数列进行增序排列,那么这个过程(快排)可以概括为:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
假设数列为{4,9,1,5,3,8,7,6,2}
我们先选取4为基准数,进行第二步排序可以得到的新数列为
{1,3,2,4,9,5,8,7,6}
那么此时可以得到2个字数列
{1,3,2},4,{9,5,8,7,6}
并且也确定了2个数子列的位置,接下来继续用同样的法方法处理子序列直到所有子数列都只有一个值,那么排序便完成了。
代码实现
1 | public static void QuickSort(int[] arr,int low ,int high ) { //low代表数组第一个值的下表,high代表最后一个 |
算法时间复杂度
- 快速排序最优的情况下时间复杂度为:O( nlogn )
(快速排序最优的情况就是每一次取到的元素都刚好平分整个数组)
- 快速排序最差的情况下时间复杂度为:O( n^2 )
(最差的情况就是每一次取到的元素就是数组中最小/最大的,这种情况其实就是冒泡排序了)
- 快速排序的平均时间复杂度也是:O(nlogn)
空间复杂度
最优的情况下空间复杂度为:O(logn) ;每一次都平分数组的情况
最差的情况下空间复杂度为:O( n ) ;退化为冒泡排序的情况
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 繁星!
评论