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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 涐扪①起奮乧 中级黑马   /  2013-11-21 17:47  /  1300 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 涐扪①起奮乧 于 2013-11-22 00:13 编辑
  1. class  Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                         int[] arr = {1,2,6,7,15,10,17,12};
  6.                         int index1 = getIndex(arr,10);
  7.                         System.out.println("index1="+index1);
  8.                     bubbleSort(arr);
  9.                         printArray(arr);
  10.                         int index2 = halfSearch(arr,10);
  11.                         System.out.println("index2="+index2);
  12.                 }
  13.                
  14.                  public static int getIndex(int[] arr,int key)
  15.                 {
  16.                          for (int x = 0; x<arr.length; x++)
  17.                          {
  18.                                  if(arr[x]==key)
  19.                                          return x;
  20.                          }
  21.                          return -1;
  22.                 }
  23.                

  24.                
  25.                 public static void bubbleSort(int[] arr)
  26.                 {
  27.                          for (int x = 0; x<arr.length-1; x++)
  28.                          {
  29.                                  for (int y = 0; y<arr.length-x-1; y++)
  30.                                  {
  31.                                          if(arr[y]>arr[y+1])
  32.                                          {
  33.                                                  int temp = arr[y];
  34.                                                  arr[y] = arr[y+1];
  35.                                                  arr[y+1] = temp;
  36.                                          }

  37.                                  }
  38.                          }
  39.            }
  40.            
  41.                 public static void printArray(int[] arr)
  42.             {
  43.                         System.out.print("[");
  44.                         for (int x = 0; x<arr.length; x++)
  45.                         {
  46.                                 if (x!=arr.length-1)
  47.                                         System.out.print(arr[x]+",");
  48.                                 else
  49.                                         System.out.println(arr[x]+"]");
  50.                         }
  51.                 }
  52.                
  53.                 public static int halfSearch(int[] arr,int key)
  54.                 {
  55.                         int min,max,mid;
  56.                         min = 0;
  57.                         max = arr.length-1;
  58.                         mid = (min+max)/2;
  59.                         while(arr[mid]!=key)
  60.                         {
  61.                                 if (key>arr[mid])
  62.                                         min = mid+1;
  63.                                 else if (key<arr[mid])
  64.                                         max = mid-1;
  65.                                 if (min>max)
  66.                                         return -1;
  67.                                 mid = (min+max)/2;
  68.                         }
  69.                         return mid;
  70.                 }
  71. }
复制代码
运行结果:
index1=5
[1,2,6,7,10,12,15,17]
index2=4

index1和index2查询的结果不一样,答案应该是5
也没找出来我折半查找算法那个地方错了。。。郁闷中,求解答

4 个回复

倒序浏览
你的程序是对的。
int[] arr = {1,2,6,7,15,10,17,12};
这个数组不是有序的。
你重新排序之后10往前进了一位。
回复 使用道具 举报
你排完序后进行的二分查找,当然和未排序之前不一样
排序后[1,2,6,7,10,12,15,17]
10的下标是4
所以没有错误好么
楼主,不要这么耍我们好波,害我看好久
回复 使用道具 举报
何丛 发表于 2013-11-21 18:05
你排完序后进行的二分查找,当然和未排序之前不一样
排序后[1,2,6,7,10,12,15,17]
10的下标是4

的确没有理解过来,真的,不存在欺骗,还请见谅。谢谢你的指点。现在一下子明朗了,有时候因为一点小问题,再找就是找不出来问题,不得以才发表的帖子。我下午浪费了一个小时想这道题。最后还没没想出来
回复 使用道具 举报
折半查找有个前提:查找的数组必须是有序的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马