public static int binarySearchDemo(int[] arr, int t) {
int l = 0;
int r = arr.length - 1;
int m;
while (l <= r) {
m = (l + r) >> 1;
if (arr[m] == t) {
//已找到,返回当前索引
return m;
} else if (arr[m] > t) {
//中间值右侧大于t
r = m - 1;
} else {
//中间值左侧小于t
l = m + 1;
}
}
return -1;
}
public static void quick(int[] a, int l, int h) {
//如果左边界大于等于右边界,结束递归
if (l >= h) {
return;
}
//p 索引值
int p = partition(a, l, h);
//左边分区的范围确定
quick(a, l, p - 1);
//右边分区的范围确定
quick(a, p + 1, h);
}
/**
* @Param arr 待排序的数组
* @param l 左边界
* @param h 右边界
* @Return 本次基准点元素最终位置
*/
private static int partition(int[] arr, int l, int h) {
//1.基准元素
int pv = arr[h];
//2.左边界
int i = l;
for (int j = l; j < h; j++) {
if (arr[j] < pv) {
//3.arr[j]小于基准点则交换,放在基准点的左边
swap(arr, i, j);
//4,左边界+1
i++;
}
}
//5.基准点与i交换
swap(arr, h, i);
System.out.println(Arrays.toString(arr) + "i=" + i);
//本次基准点元素最终位置
return i;
}
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}