package wck.sort;/**
* Created by wusong on 18/9/12.
*/
/**
* @program: demo
* @description: 快速排序
* @author: wck
* @create: 2018-09-12 10:51
**/
public class QuickSort {
// 递归使用快速排序,对arr[l...r]的范围进行排序
private static void sort(int[] arr, int l, int r){
if( l >= r )
return;
int p = partition(arr, l, r);// 分区
sort(arr, l, p-1 );//每次中间元素都已经符合所以不需要考虑p
sort(arr, p+1, r);
}
private static int partition(int[] arr, int l, int r){
//作为标准
int v =arr[l];
// arr[l+1...j] < v ; arr[j+1...i) > v ,因为i是当前要考察的元素
int j = l;//初始化两个分区都是null
for(int i = l+1; i<=r;i++){
if(arr[i] < v){
j++;
swap(arr,j,i);
}
}
swap(arr,l,j);
return j;
}
public static void sort(int[] arr){
int n = arr.length;
sort(arr, 0, n-1);
}
private static void swap(int[] arr, int i, int j) {
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
// 测试 QuickSort
public static void main(String[] args) {
int[] arr = {5,8,4,2,1};
sort(arr);
for (int i=0;i<arr.length;i++)
System.out.println(arr[i]);
return;
}
}
算法基础之--快速排序实现
最新推荐文章于 2020-05-19 16:03:02 发布