package com.lll.algorithms.sort;
/**
* @ClassName : QuickSort
* @Description: 快速排序
* @Author: liulianglin
* @Date: 2021/11/18 21:52
* @Version : 1.0
*/
public class QuickSort {
private static void quickSort(int[] arr, int leftIndex, int rightIndex){
if (leftIndex >= rightIndex){
return;
}
int left = leftIndex;
int right = rightIndex;
//基准值
int key = arr[left];
//从左右两边开始扫面,直到left=right
while (left < right){
//从右边向左边扫描,找到第一个比基准值小的元素
while(right > left && arr[right] >= key){
right--;
}
//将arr[right]放入arr[left]交换位置
arr[left] = arr[right];
//从左边向右边扫面,找到第一个比基准值大的元素
while(left < right && arr[left] <= key){
left++;
}
//找到元素后将arr[left]放入arr[right]
arr[right] = arr[left];
}
//基准值归位
arr[left] = key;
//对基准值左边的元素进行递归排序
quickSort(arr, leftIndex, left-1);
//对基准值右边的元素进行递归排序
quickSort(arr, right+1, rightIndex);
}
public static void main(String[] args) {
int[] arr = {5, 1, 7, 3, 1, 6, 9, 4};
quickSort(arr, 0, arr.length - 1);
for (int i : arr) {
System.out.print(i + "\t");
}
}
}