/**
* 测试二分查找法
*/
import java.util.Arrays;
public class TestBinarySearch {
public static void main(String[] args) {
int[] num1 = {11, 19, 12, 16, 13, 17, 14};
//先将数组排序
maoPao(num1);
binarySearch(num1,13);
}
//冒泡排序方法
public static void maoPao(int[] num) {
for (int i = 0; i < num.length; i++) {
int temp;
// 判断条件1,未执行交换代码则退出循环
boolean flag = true;
/*内层循环:每一趟循环都从数列的前两个元素开始进行比较,比较到无序数组的最后*/
for (int n = 0; n < num.length - 1 - i; n++) {
//是倒序排列还是正序排列就完全取决于下面的判断条件
if (num[n] > num[n + 1]) {
//交换代码↓
temp = num[n];
num[n] = num[n + 1];
num[n + 1] = temp;
//判断条件2,执行交换代码则不退出循环
flag = false;
}
}
//根据标记量的值判断数组是否有序,如果有序,则退出;无序,则继续循环。
if (flag) {
break;
}
}
System.out.println(Arrays.toString(num));
}
//使用二分查找法查找
public static int binarySearch(int[] num, int key) {
//int[] num = {11,19,12,16,13,17,14};
int max = num.length - 1;//数组的最大索引
int min = 0;//数组的最小索引
int mid; //中间索引;
while (min <= max) {
mid = (min + max) / 2;
if (num[mid] > key) {
//说明 我想要的数在左边
max = mid - 1;
} else if (num[mid] < key) {
//说明 我们想要的数在右边
min = mid + 1;
} else if (num[mid] == key) {
//说明找到我们想要的数了
break;
}
}
//判断如果数组最小索引大于最大索引则执行语句块1,否则执行语句块2.
if (min > max) {
System.out.println(key+"这个数不存在数组中");
} else {
System.out.println("这个数在数组中的第:" + (min + 1)+" 索引");
}
return 1;
}
}
老师这是我自己看文档写的,帮我看一下有需要优化的地方吗
或者给一些宝贵的建议