自己的写法,比较好理解
import java.util.Arrays;
/**
* Created by shixi on 2019/6/4
*/
public class QuickSort1 {
public static void main(String[] args) {
int [] arr = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8};
recursion(arr, 0, arr.length - 1);
}
public static int sortArr(int [] arr, int low, int hei){
if(low < hei){
int temp = arr[low];
int lowIndex = low;
while(low < hei){
while(low < hei && arr[hei] >= temp ){
hei --;
}
while(low < hei && arr[low] <= temp){
low ++;
}
if(low < hei){
int exchange = arr[low];
arr[low] = arr[hei];
arr[hei] = exchange;
}
}
//基数放入low位置,
arr[lowIndex] = arr[low];
arr[low] = temp;
System.out.println(Arrays.toString(arr));
}
return low;
}
public static void recursion(int [] arr, int low, int hei){
if(low < hei){
int middle = sortArr(arr, low, hei);
recursion(arr, low, middle - 1);
recursion(arr, middle + 1, hei);
}
}
}
网上的写法
public static void main(String[] args) {
int score[] = {10,-9,6, 4, 3,-1, 8, 7, 2,9};
recursion(score, 0, score.length-1);
System.out.println(Arrays.toString(score));
}
//快速排
public static int quicklySort(int [] score , int low ,int hei){
int temp = score[low];
while(low < hei){
while(low < hei && score[hei] > temp){//把score[hei] > temp改为score[hei] < temp,则为降序
hei --;
}
score[low] = score[hei];
while(low < hei && score[low] < temp){//把score[low] < temp改为score[low] > temp,则为降序
low ++ ;
}
score[hei] =score[low];
}
score[low] = temp;
System.out.println(Arrays.toString(score));
return low;
}
public static void recursion(int [] score , int low ,int hei){
if(low < hei){
int middle = quicklySort(score, low, hei);
recursion(score , low ,middle-1);
recursion(score , middle+1 , hei);
}
}