Java 作业题3
二分查找 主要是其中的细节 这些位置的判断 不去自己调试真的不知道。。。到了考场上如果要手写,连bug也不知道
我也不知道程序设计要笔试是什么意思
本身就是很傻的行为
考作业题 考背诵么?
package Test; public class Main { public static void main(String[] args) { int[] a={1, 3, 3, 3, 3, 6, 6, 8, 8, 8, 10}; System.out.println(binarySearch(a, 3, 1)); } /** * @param a 待查数组 * @param key 待查关键字 * @param flag 如果flag等于0,表示查找关键字出现的第一个位置;如果flag等于1,返回关键字出现的最后一个位置 * @return 关键字的位置 */ private static int binarySearch(int[] a, int key, int flag) { int len = a.length; if(key < a[0] || key > a[len - 1]) return -1; int i = 0, j = len - 1; while(i <= j) { int mid = (i + j) / 2; if(key == a[mid]) { //接下来的三行代码是为了查找关键字出现的最早的位置 int tmp = mid; while(--tmp >= 0 && a[tmp] == key);//防止越界 i = tmp + 1; //应该新定义一个变量表示,用i存储也行。 //接下来的两行代码是为了查找关键字出现的最后的位置 while(++mid < len && a[mid] == key); j = mid - 1; //返回找到的关键字 if(flag == 0) return i; else return j; } else if(key > a[mid]) { i = mid + 1; } else { j = mid - 1; } } return -1; } }