一、原理
- 选择待排数组区间内最后一个元素作为基准
- 小于此基准的放在此元素的左边
- 大于此基准的放在此元素的右边
- 最后把此基准交换到此数组的应该位置
- 最后分别针对基准左区间和右区间分别做递归排序
package org.example;
import java.util.Arrays;
public class SortTest {
void quickSort(int[] arr, int s, int e) {
if (s<e) {
int i = quickSortCore(arr, s, e);
quickSortCore(arr,s, i-1);
quickSortCore(arr,i+1, e);
}
}
int quickSortCore(int[] arr, int s, int e) {
int p = arr[e];
int lp = s-1; // 小于基准的位置
for (int i = s; i < e; i++) {
if (arr[i]<p) {
lp++;
int tmp = arr[lp];
arr[lp] = arr[i];
arr[i] = tmp;
}
}
// 把基准转移到正确的位置
int tmp = arr[lp+1];
arr[lp+1] = arr[e];
arr[e] = tmp;
return lp+1;
}
public void main(String[] args) {
int[] arr = {1,3,8,7,5};
this.quickSort(arr,0, arr.length-1);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}