将数组从小到大顺序排列
简单思路: 将0索引的6作为刚开始的基准数, 俩指针 start 和 end 作为 索引
首先end从末尾索引的8开始, 往左找到比6要小的数
start从1索引的1开始,往右找到比6要大的数
将 end 和 start 互换,接着重复以上操作
一直到 start > end , 这样大致从中间看,左边的是比6小的,右边比6大的
然后将6放在中间, 就排序完成了.
public class 快速排序 {
public static void main(String[] args) {
int[] arr = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8};
//调用快速排序方法,将数组,起始索引,结束索引 传入方法中
quickSort(arr, 0, arr.length - 1);
//遍历数组
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
public static void quickSort(int[] arr, int i, int j) {
//定义两个变量记录要查找的范围
int start = i;
int end = j;
//递归出口
if(start>end) return;
//记录基准数
int baseNumber = arr[i];
//使比基准数小的在左边,比基准数大的在右边
while (start != end) {
//用end,从后往前找比基准数小的数字
while (true) {
if (end <= start || arr[end] < baseNumber) break;
end--;
}
//利用start,从前往后找比基准数大的数字
while (true) {
if (end <= start || arr[start] > baseNumber) break;
start++;
}
//把end和start指向的元素进行交换
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
//当start和end指向同一元素,循环结束
//此时start,end相等,表示基准数应存入的位置
//基准数归位
int temp = arr[i];//i为0,即基准数
arr[i] = arr[start];
arr[start] = temp;
//确定基准数左边的范围,重复方法,递归
quickSort(arr,i,start-1);
//确定基准数右边的范围,重复方法,递归
quickSort(arr,start+1,j);
}
}