1、快速排序
会把数组中的一个数当做基准数,一般把数组中最左边得数当做基准数。然后从两边开始检索。先从右边检索比基准数小的,再从左边检索比基准数大的。如果检索到了,九停下,然后交换这两个元素。然后再继续检索。
一旦相遇停止检索,交换基准数和相遇位置的元素。
先排基准数左边再排右边
package com.hzau.itdog;
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int[] arr= {6,3,8,10,9,85,2,1,120,654654};
quickSort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void quickSort(int[]arr,int left,int right) {
//左边索引不能大于右边索引
if(left>right) {
return;
}
//定义基准数
int base=arr[left];
//左边
int i=left;
//右边
int j=right;
//i和j不相遇在循环中检索
while(i!=j) {
//j先从右往左检索比基准数小的就停下
//比基准数大继续检索
while(arr[j]>=base &&i<j) {
j--;
}
//找到比基准数小
//i从左往右
while(arr[i]<=base &&i<j) {
i++;
}
//交换i和j位置的元素
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
//i和j相遇交换基准数和相遇位置元素
arr[left]=arr[i];
arr[i]=base;
//基准数左边比基准数小,右边比基准数大
//排左边
quickSort(arr,left,i-1);
//排右边
quickSort(arr,i+1,right);
}
}