A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  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. }
复制代码


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马