首先说说二分查找法。
二分查找法是对一组有序的数字中进行查找,传递相应的数据,进行比较查找到与原数据相同的数据,查找到了返回对应的数组下标,没有找到返回-1;
采用非递归方式完成二分查找法。java代码如下所示。
[java] view plain copy
- /**
- * 二分查找普通实现。
- * @param srcArray 有序数组
- * @param key 查找元素
- * @return 不存在返回-1
- */
- public static int binSearch(int srcArray[], int key) {
- int mid = srcArray.length / 2;
- if (key == srcArray[mid]) {
- return mid;
- }
- int start = 0;
- int end = srcArray.length - 1;
- while (start <= end) {
- mid = (end - start) / 2 + start;
- if (key < srcArray[mid]) {
- end = mid - 1;
- } else if (key > srcArray[mid]) {
- start = mid + 1;
- } else {
- return mid;
- }
- }
- return -1;
- }
采用递归方式完成二分查找算法。代码如下所示。
[java] view plain copy
- /**
- * 二分查找递归实现。
- * @param srcArray 有序数组
- * @param start 数组低地址下标
- * @param end 数组高地址下标
- * @param key 查找元素
- * @return 查找元素不存在返回-1
- */
- public static int binSearch(int srcArray[], int start, int end, int key) {
- int mid = (end - start) / 2 + start;
- if (srcArray[mid] == key) {
- return mid;
- }
- if (start >= end) {
- return -1;
- } else if (key > srcArray[mid]) {
- return binSearch(srcArray, mid + 1, end, key);
- } else if (key < srcArray[mid]) {
- return binSearch(srcArray, start, mid - 1, key);
- }
- return -1;
- }
递归思想会被经常用到,更加突出了编程解决问题的高效。
调用执行main函数,代码如下。
[java] view plain copy
- public static void main(String[] args) {
- int srcArray[] = {3,5,11,17,21,23,28,30,32,50,64,78,81,95,101};
- System.out.println(binSearch(srcArray, 0, srcArray.length - 1, 222));
- System.out.println(binSearch(srcArray,81));
- }
在这里说声抱歉,之前的代码有问题,自己一直没有修改,罪过罪过