/**
* 快速排序算法
* 算法思想:
* 基准点,分治,递归
* 文章参考:https://blog.csdn.net/sdoog_owt/article/details/80058870
* @author ZSL
*/
public class QuickSort {
public static void main(String[] args) {
int[] arr = {6,3,4,1,9,8,2,5,7,0,12,45,99};
System.out.println("初始数组:");
print(arr);
quickSort(arr,0,arr.length-1);
System.out.println("排序后数组:");
print(arr);
}
/**
* 快速排序
* @param arr 待排部分
* @param low 左探针
* @param high 右探针
*/
private static void quickSort(int[] arr, int low, int high){
if (low > high){
return;
}
int i = low, j = high;
//temp 为基准位
int temp = arr[low];
while (i<j){
// 先看右边,右往左递减
while (temp <= arr[j] && i< j){
j--;
}
// 左往右递增
while (temp >= arr[i] && i < j){
i++;
}
if (i<j){
swap(arr,i,j);
}
}
//最后将基准为与i和j相等位置的数字交换
swap(arr,low,i);
//左边部分递归
quickSort(arr,low,i-1);
//右边部分递归
quickSort(arr,i+1,high);
}
/**
* 交换数值
* @param arr 数组
* @param i 一个下标位置
* @param pos 另一个下标位置
*/
private static void swap(int[] arr,int i,int pos){
int temp;
temp=arr[i];
arr[i]=arr[pos];
arr[pos]=temp;
}
/**
* 打印数组
* @param arr 数组
*/
private static void print(int[] arr){
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
}
}