package com.zhao.algorithm.sort;
import java.util.Arrays;
/**
* 快速排序
*/
public class QuickSort {
public static void main(String[] args) {
int []arr={5,8,9,7,4,5,6,45,1,2,8,1,2,7};
quickSort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
/**
*
* @param arr 要排序的数组
* @param start 开始排序的位置
* @param end 结束排序的位置
*/
private static void quickSort(int[] arr,int start,int end) {
if (start < end) {
//以那个数字开始比较,从数组第一个数字 标准数
int begin = arr[start];
//记录需要排序的下标
int low = start;
int high = end;
//循环找比标准数字大的和比标准数字小的
while (low < high) {
//如果右边数字比标准数字大
while (low < high && begin <= arr[high]) {
high--;
}
//如果右边数字比标准数字小 ,替换右边数字到以low为下标的数字
arr[low] = arr[high];
//如果左边数字比标准数字小
while (low < high && begin >= arr[low]) {
low++;
}
//如果左边数字比标准数字大 ,替换当前数字到以high为下标的数字
arr[high] = arr[low];
}
//当low 和high重合时 将这个下标的数字设置为标准数
arr[low] = begin;
//递归继续分割
//递归分割右边的
quickSort(arr, low + 1, end);
//递归分割左边的
quickSort(arr, start, low);
}
}
}