快速排序
Posted 韩思明
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序相关的知识,希望对你有一定的参考价值。
基本思想
通过使用一个基准值将列表分为2个子列表,具体的过程是:
将基准值放在正确的位置上,在一个子列表中放入小于基准值的元素,另一个子列表中放入大于基准值的元素。
这就是快速排序(Quick Sort)的思想。
快排算法提供了目前已知最快的排序技术,除了某些极其特殊的情况下之外,快速排序徐几乎适用于所有场合。
实现代码
package com.csdhsm.sort; /** * @Title: QuickSort.java * @Package: com.csdhsm.sort * @Description 快速排序 * @author Han * @date 2016-4-3 上午11:37:02 * @version V1.0 */ public class QuickSort { /** * 快速排序递归调用 * @Description * @author Han * @param arr * @param low * @param high */ public void sort(int[] arr,int low,int high){ if(low < high){ int pos = findPoss(arr,low,high); sort(arr,low,pos-1); sort(arr,pos+1,high); } } /** * @Description 寻找合适的位置 * @author Han * @param a * @param low * @param high */ public int findPoss(int arr[],int low,int high){ /** * t为锚点,左边都是小于t的数字,右边都是大于t的数字 */ int t = arr[low]; /** * 一直要找到low等于high为止 */ while(low < high){ while(low < high && arr[high] >= t){ high--; } arr[low] = arr[high]; while(low <high && arr[low] <= t){ low++; } arr[high] = arr[low]; } arr[low] = t; return low; } }
效率分析
不稳定。
空间复杂度:O(1)
时间复杂度:O(nlog2n)
最坏情况:O(n2),要排序数组基本有序,基准值每次取最大(最小)元素,退化为冒泡。
最好情况:O(nlog2n) 基准值两边元素个数基本相同.
以上是关于快速排序的主要内容,如果未能解决你的问题,请参考以下文章