import org.junit.Test;
public class solution {
@Test
public void test2() {
int[] arr={3,2,1};
quickSort(arr, 0, arr.length-1);
for(int ele:arr){
System.out.println(ele+" ");
}
}
// 快速排序
/*
* 1 找出中间索引的位置
* 2 递归调用左区间,递归调用右区间
*
* 对于 partition函数
* j指向l元素的最终位置,使用两个相邻的滑动窗口
*/
public void quickSort(int[] arr, int l, int r) {
if (l >= r) {
return;
}
int p = partition(arr, l, r);
quickSort(arr, l, p - 1);
quickSort(arr, p + 1, r);
}
private int partition(int[] arr, int l, int r) {
int j = l;// l元素的最终位置
for (int i = l + 1; i <= r; i++) {
if (arr[i] < arr[l]) {
swap(arr, j + 1, i);
j++;
}
}
swap(arr, l, j);
return j;
}
private void swap(int[] arr, int i, int i2) {
int temp = arr[i];
arr[i] = arr[i2];
arr[i2] = temp;
}
}