认识快速排序
Posted dxj1016
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了认识快速排序相关的知识,希望对你有一定的参考价值。
9、快速排序
快排1.0:找一个轴值,大于轴值的在右边递归,小于等于轴值的时候在左边递归;
空间复杂度:
快排2.0:找一个轴值,大于轴值的在右边递归,小于轴值的在左边递归,等于轴值的不用动位置。
快排3.0:概率
package 左神算法.快速排序;
public class QuickSort
public static void main(String[] args)
int[] arr2 = 3, 5, 0, 3, 4, 5, 2, 6, 9, 6;
int L = 0;
int R = arr2.length - 1;
quickSort(arr2, L, R);
for (int i = 0; i < arr2.length; i++)
System.out.print(arr2[i] + " ");
//arr[l..r]排好序
public static void quickSort(int[] arr, int L, int R)
if (L < R)
swap(arr, L + (int) (Math.random() * (R - L + 1)), R);
int[] p = partition(arr, L, R);
quickSort(arr, L, p[0] - 1);//<区
quickSort(arr, p[1] + 1, R);//>区
// 这是一个处理arr[l..r]的函数
// 默认以arr[r]做划分,arr[r]->p <p ==p >p
// 返回等于区域(左边界,右边界),所以返回一个长度为2的数组res,res[0] res[1]
public static int[] partition(int[] arr, int L, int R)
int less = L - 1;//<区右边界
int more = R;//>区左边界
while (L < more) //L表示当前数的位置 arr[R] -> 划分值
if (arr[L] < arr[R]) //当前数<划分值
swap(arr, ++less, L++);
else if (arr[L] > arr[R]) //当前数>划分值
swap(arr, --more, L);
else
L++;
swap(arr, more, R);
return new int[]less + 1, more;
public static void swap(int[] arr, int i, int j)
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
/*
0 2 3 3 4 5 5 6 6 9
*/
以上是关于认识快速排序的主要内容,如果未能解决你的问题,请参考以下文章