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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. ------<a  target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
  2. //数组的查找练习
  3. class ArrayTest4
  4. {
  5.         public static void main(String[] args)
  6.         {
  7.                 int[] arr = {3,5,13,15,16,18,55};
  8.                 int index = halfSearch_1(arr,18);
  9.                 System.out.println(index);
  10.                 //把17插入到数组中时,输出它应该所在位置的下标;
  11.                 int index2 = getIndex(arr,17);
  12.                 System.out.println(index2);

  13.         }
  14.         /*
  15.         折半查找,提高效率,但是必须是针对有序的数组
  16.         */
  17.         //方法一:
  18.         public static int halfSearch_1(int[] arr,int key)
  19.         {       
  20.                 //定义三个整型的值,分别表示数组开头元素的下标、
  21.                 //中间元素的下标,以及最后元素的下标。
  22.                 int min,max,mid;
  23.                 min = 0;
  24.                 max = arr.length-1;
  25.                 mid = (max+min)/2;
  26.                 while(arr[mid]!=key)
  27.                 {
  28.                         if(key>arr[mid])
  29.                                 min = mid + 1;
  30.                         else if(key<arr[mid])
  31.                                 max = mid - 1;
  32.                         if(min>max)
  33.                                 return -1;
  34.                         mid = (max+min)/2;
  35.                 }
  36.                 return mid;
  37.         }
  38.         //方法二:
  39.         public static int halfSearch_2(int[] arr,int key)
  40.         {
  41.                 int min=0,max=arr.length-1,mid;
  42.                 while(min<=max)
  43.                 {
  44.                         mid = (max + min)>>1;
  45.                         if(key>arr[mid])
  46.                                 min = mid + 1;
  47.                         else if(key<arr[mid])
  48.                                 max = mid - 1;
  49.                         else
  50.                                 return mid;
  51.                 }
  52.                 return -1;
  53.         }
  54.         /*
  55.         在一个有序的数组中插入一个数,使的插入后这个数组仍然有序,给出插入位置的下标;
  56.         */
  57.         public static int getIndex(int[] arr,int key)
  58.         {
  59.                 int min=0,max=arr.length-1,mid;
  60.                 while(min<=max)
  61.                 {
  62.                         mid = (max + min)>>1;
  63.                         if(key>arr[mid])
  64.                                 min = mid + 1;
  65.                         else if(key<arr[mid])
  66.                                 max = mid - 1;
  67.                         else
  68.                                 return mid;
  69.                 }
  70.                 return min;
  71.         }
  72. }
复制代码

0 个回复

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