我会经常更新一些自己学习过程中写的东西,建议多dbg观察一下数据每次循环的变化,这样才能加深理解。好好学习!
public class TestMath {public static void main(String[] args) {int arry[] = {12, 43, 12, 65, 12, 65, 12, 88, 3, 98, 1};// System.out.println(binserch(arry,20));maopao(arry);}/*** 二分搜索(折半查找)* 思想:将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,* 如果要找的元素值小 于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一次比较,将查找区间缩小一半。* 条件:数组必须有序* 优点:查找效率高* 缺点:元素必须有序且插入删除困难* 适用场景: 折半查找方法适用于不经常变动而查找频繁的有序列表。*/public static int binserch(int[] arr, int key) {int left = 0;int right = arr.length - 1;while (left <= right) {int mid = (right + left) / 2;if (arr[mid] == key) {return mid;} else if (arr[mid] < key) {left = mid + 1;} else if (arr[mid] > key) {right = mid - 1;}}return -1;}/*** 冒泡排序** @param arr* @return*/public static int[] maopao(int[] arr) {for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr.length - i - 1; j++) {//这里吧参数提出来方便dug观察每次循环的参数变化int arrj = arr[j];int arrj1 = arr[j + 1];//这里为正序排序if (arr[j] > arr[j + 1]) {int temp = arr[j + 1];arr[j + 1] = arr[j];int s = arr[j];arr[j] = temp;}}}//打印出来for (int as : arr) {System.out.println(as);}return arr;}}