Java数据结构 - 查找算法
1、线性查找(一层 for 循环)O(n)
1 // 线性查找 2 public int search(int target) { 3 // 遍历数组 4 for (int i = 0; i < elements.length; i++) { 5 if (elements[i] == target) { 6 if (elements[i] == target) { 7 return i; 8 } 9 } 10 } 11 // 没有找到指定的元素 12 return -1; 13 }
2、二分查找(注意循环的结束条件是开始大于等于结束)O(logn)
1 public int binarySearch(int target) { 2 // 记录开始位置 3 int begin = 0; 4 // 记录结束位置 5 int end = elements.length-1; 6 // 记录中间的位置 7 int mid = (begin+end)/2; 8 // 记录目标位置 9 int index = -1; 10 // 二分法查找 11 while (begin < end) { 12 // 判断中间的这个元素是不是要查找的元素 13 if (elements[mid] == target) { 14 index = mid; 15 break; 16 // 中间这个元素不是要查找的元素 17 } else { 18 // 判断中间这个元素是不是比目标元素大 19 if (elements[mid] > target) { 20 // 把结束位置调整到中间位置的前一个位置 21 end = mid - 1; 22 // 中间这个元素比目标元素小 23 } else { 24 // 把开始位置调整到中间位置的后一个位置 25 begin = mid + 1; 26 } 27 // 取出新的中间位置 28 mid = (begin + end)/2; 29 } 30 } 31 return index; 32 }