分析:
取一個數P作為基準,然后將小于P的數放在P的左邊,大于P的數放在P的右邊
JAVA實現:
public class Main {
public static void main(String[] args) {
int[] arr = new int[100];
for(int i=0;i<100;i++) {
arr[i] = (int) (Math.random() * 100);
}
sort(arr);
for(int i=0;i<100;i++){
System.out.println(arr[i]);
}
}
public static void sort(int[] arr) {
sort(arr, 0, arr.length-1);
}
public static void sort(int[] arr, int l, int r) {
if(l > r){
return;
}
int p = arr[l];
int i=l;
int j=r;
while(i < j){
while(i < j && arr[j] >= p) {
j--;
}
while(i < j && arr[i] <= p) { //必須是小于等于,忽略第一個基準數
i++;
}
if(i<j){
swap(arr, i,j);
}
}
if(i != l){
swap(arr, i, l); //將基準數p和位置i的數進行交換,因為i這個位置的數是小于p的
sort(arr, l, i-1);
}
sort(arr, i+1, r);
}
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
下面是數組的交換過程:
原始數組 [4,8,5,0,1,6,3]
交換:3,8
[4, 3, 5, 0, 1, 6, 8]
交換:1,5
[4, 3, 1, 0, 5, 6, 8]
基準交換:4,0
[0, 3, 1, 4, 5, 6, 8]
交換:3,1
[0, 1, 3, 4, 5, 6, 8]