基本算法思想
快速排序是一种分治算法,同‘归并排序’思想相同,呈互补。将数组切分(partition)为两部分,对独立两部分进行排序。归并排序是对数组等分切割后,将有序子序列归并得到有序数组;快速排序是安装数组的内容决定切分位置后,两个子数组有序后整个数组也有序。
特点
- 原地排序(仅需要很小的辅助栈)
- 长度为 N的数组排序时间和 NlgN成正比
- 内循环比大多数排序要短
快速实现算法
public class quick{
pulic static void sort(Comparable[] a){
StdRandom.shuffle(a); //消除对输入依赖
sort(a, 0, a.length-1);
}
private static void sort(Comparable[] a, int lo, int hi){
if(hi <= lo) return;
int j = partition(a, lo, hi);
sort(a, lo, j-1); //左侧排序
sort(a, j, hi); //右侧排序
}
}