实现思路:
1.定义一个基准数(pivot),将<=pivot的元素都放在pivot的左边,将>=pivot的元素都放在pivot的右边
2.找到pivot的值所在位置的索引
3.再对pivot左边的元素和右边的元素递归进行排序
public class QuickSort {
public static void main(String[] args) {
int[] arr = new int[1000];
Random random = new Random();
for (int i = 0; i <1000; i++) {
arr[i]=random.nextInt(1000);
}
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 index = partition(arr, left, right);
//排序基准数左边的元素
quicksort(arr,0,index-1);
//排序基准数右边的元素
quicksort(arr,index+1,right);
}
public static int partition(int[] arr,int left,int right){
int pivot = arr[right];//定义基准数
int i = left;//定义左指针
int j = right-1;//定义右指针
while (i<=j){
while (i <= j && arr[i]<=pivot) i++;//从左开始寻找
while (i <= j && arr[j]>=pivot) j--;//从右开始寻找
if (i<j) swap(arr,i,j);//交换左右指针指向的位置
}
swap(arr,i,right);//交换基准数和左指针指向位置的数
return i;
}
/**
* 数组元素交换的方法
* @param arr 交换元素的数组
* @param i 交换元素的索引
* @param j 交换元素的索引
*/
public static void swap(int[] arr,int i,int j){
int tmp=0;
tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}
}