##快速排序
package com.xiaoyg.algorithm.sort;
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[] values = {17,14,13,29,25,8,4};
System.out.println("values数组原始顺序:"+ Arrays.toString(values));
quickSort(values, 0, values.length - 1);
System.out.println("values数组排序后顺序:"+ Arrays.toString(values));
}
private static void quickSort(int[] values, int left,int right) {
//如果左值>=右值,不需要进行排序。
if (left >= right) return;
//取出基准值
int pivot = values[left];
//定义左值和右值
int le = left;
int ri = right;
//左值下标小于右值下标示时,开始循环比较
while (le < ri){
//右值大于等于中值,不需要交换值,只需要将右标左移
while (le < ri && values[ri] >= pivot){
ri --;
}
//右值小于中值时,将右标值赋给左标值,即将小于中值的放到左边。
if (le < ri){
values[le] = values[ri];
}
//左值小于等于中指,说明不需要交换值,将左标右移
while (le < ri && values[le] <= pivot){
le ++;
}
//左值大于中值,需要将左值赋给右标值。
if (le < ri){
values[ri] = values[le];
}
//本轮比较结束,将中值放在当前游标的位置,这样,左边都是小于中值的,右边都是大于中值的。
if (le <= ri){
values[le] = pivot;
}
}
//递归中值左边的操作,重复上方的逻辑
quickSort(values, left, ri - 1);
//递归中值右边的操作,重复上面的逻辑。
quickSort(values, ri + 1, right);
}
}