概述
快速排序采用了分治策略。就是在一个数组中取一个基准数字,把小的数放基准的左边,大的数放基准的右边。 基准左边和右边分别是新的序列。在新的序列中再取一个基准数字,小的放左边,大的放右边。
动图演示
图片来源:百度
优缺点
优点
极快,数据移动少
缺点
不稳定
复杂度
时间
- 最好情况:O(nlog2(n))
- 平均情况:O(nlog2(n))
- 最坏情况:O(n^2)
空间
O(log2(n))
使用场景
适用于数组长度比较大的情况,对于小数组,快速排序比插入排序慢
代码
import java.util.Arrays;
/**
* ===============================
* 作者:amos lam
* 时间:2020年1月5日下午12:37:50
* 备注:算法 - 排序之快速排序
* ===============================
*/
public class QuickSort {
public static void main(String[] args) {
int[] arr = new int[] { 32, 26, 83, 55, 42, 67, 73, 92, 60 };
quickSort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
}
public static void quickSort(int[] arr, int low, int high) {
if (low < high) {
int temp = quickPartition(arr, low, high);
quickSort(arr, low, temp - 1);
quickSort(arr, temp + 1, high);
}
}
public static int quickPartition(int[] arr, int low, int high) {
int key = arr[low];
while (low < high) {
while (low < high && arr[high] >= key) {
high--;
}
arr[low] = arr[high];
while (low < high && arr[low] <= key) {
low++;
}
arr[high] = arr[low];
}
arr[low] = key;
return low;
}
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于