快排思想:
1.找到任意找一个基准值,
2.然后将左边的值总体小于基准,右边的值总体大于基准,
3.然后左右两边继续递归执行1.2方法
package sort;
import java.util.Arrays;
import java.util.Scanner;
public class QuickSort {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入待排序数组的长度:");
int n = scanner.nextInt();
//创建长度为n的数组arr
int[] arr = new int[n];
System.out.println("请输入待排序数组(以enter键结束):");
//将键入的数依次赋值arr[i]
for (int i= 0 ; i < arr.length;i++){
arr[i]=scanner.nextInt();
}
System.out.println("待排序源数组:"+ Arrays.toString(arr));
quickSort(arr,0,arr.length-1);
System.out.println("快速排序后的数组:"+ Arrays.toString(arr));
}
public static void quickSort(int[] arr ,int low,int high){
//安全性检验
if (low>high){
return;
}
//定义变量
int i =low;//左边索引
int j =high;//右边索引
int temp ;//temp临时变量
int t = arr[low];//t为基准
//while循环目的是为了将t两边的数分组,左边小,右边大
while( i < j){
//从右往左看,high--,若退出循环,则说明右边有个数比基准t小
while (t<=arr[j]&&i < j){
j--;
}
//从左往右看,则low++,若退出循环,则说明左边有个数比基准t大
while (t>=arr[i]&&i < j){
i++;
}
//找到满足,左大t,右小t的两个数之后交换
if (i < j){
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
//退出了while(i< j)则说明i>=j,当i==j时,变换基准,开始下一轮
arr[low]=arr[i];
arr[i]=t;
//递归左半边数组
quickSort(arr, low, j-1);
//递归右边的数组
quickSort(arr, j+1, high);
}
}