黑马程序员技术交流社区

标题: 代码练习题之数组的基本查找和高级二分查找 [打印本页]

作者: huang_bing_hua    时间: 2016-2-28 15:23
标题: 代码练习题之数组的基本查找和高级二分查找
  1. package cn.itcast_04;

  2. /*
  3. * 二分法查找给定的有序数组中特定元素所在索引
  4. * 分析步骤:
  5. *                 A:定义一个有序的数组
  6. *                 B:定义最大索引,定义最小索引
  7. *                 C:计算出中间索引
  8. *                 D:拿中间索引值与value比较
  9. *                         如果不同
  10. *                                 大了 在左边找
  11. *                                 小了 在右边找
  12. *                         如果相同 返回中间索引值
  13. *                 E:重新计算索引
  14. *                                 大了 max = mid -1 (因为比过的我们就不用再看了)
  15. *                                 小了 min = mid +1
  16. *                 F:回到第三步
  17. * 注意:(给定的数组如果有序,用二分查找;
  18. *                 如果无序,用基本查找,因为如果你先排序的话,你就是人为的改变了原始数组的元素索引值)
  19. */

  20. public class ArrayDemo {
  21.         public static void main(String[] args) {
  22.                 int[] arr = { 13, 56, 67, 89, 90 };
  23.                 int index = getIndex(arr, 67);
  24.                 System.out.println("有序数组中67这个元素的索引值是:"+ index);
  25.                 int[] arr1 = {67,56,13,90,89};
  26.                 int index2 = getIndex2(arr1,67);
  27.                 System.out.println("无序数组中67这个元素的索引值是:"+ index2);

  28.         }

  29.         public static int getIndex2(int[] arr, int value) {
  30.                 //针对所要查找的元素不存在,我先假设不存在,给返回值定为-1
  31.                 int index =-1;
  32.                 for (int x=0;x<arr.length;x++) {
  33.                         if (arr[x] == value) {
  34.                                 //一旦存在改变索引,并退出遍历
  35.                                 index = x;
  36.                                 break;
  37.                         }
  38.                 }
  39.                 return index;
  40.         }

  41.         public static int getIndex(int[] arr, int value) {
  42.                 int min = 0;
  43.                 int max = arr.length - 1;
  44.                 int mid = (min + max) / 2;
  45.                 while (arr[mid] != value) {
  46.                         if (arr[mid] > value) {
  47.                                 max = mid - 1;
  48.                         } else {
  49.                                 min = mid + 1;
  50.                         }
  51.                         //针对所要查找的元素不存在
  52.                         if (min > max) {
  53.                                 return -1;
  54.                         }
  55.                         mid = (min + max)/2;
  56.                 }
  57.                 return mid;

  58.         }
  59. }
复制代码







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2