* 思路: * 找到左右端点,从左右端点分别循环,找到比第一个元素a大和小的两个元素,交换,一轮跑完后, * 比a大的元素都在a的右侧,比a小的元素都在a左侧,然后根据将数组切成两段,分别继续快排
public static void quickSort(int[] arr,int start,int end){
if (start>=end) return;
int p=arr[start];
int left=start;
int right=end;
while(left<=right){
//从左端开始遍历,直到找到比p大的值
while (left<=right && arr[left]<p){
left++;
}
//从右端开始遍历,直到找到比p小的值
while (left<=right && arr[right]>p){
right--;
}
//开始交换
if (left<=right){
int temp=arr[left];
arr[left]=arr[right];
arr[right]=temp;
left++;
right--;
}
}
//左半段继续快排
quickSort(arr,start,right);
//右半段继续快排
quickSort(arr,left,end);
}
public static void main(String[] args) {
int[]array =new int[10];
for (int i = 0; i < array.length; i++) {
array[i]=(int)(Math.random()*100);
System.out.print(array[i]+",");
}
System.out.println();
quickSort(array,0,array.length-1);
for (int num:array){
System.out.print(num+",");
}
}