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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 淡忘初学者 中级黑马   /  2015-8-24 22:49  /  411 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 淡忘初学者 于 2015-8-25 17:39 编辑

以下内容基于张孝祥老师视频课程笔记:
          数组数据的查找也是数组操作中不可或缺的一个部分,但数组的查找操作,不同的代码在java中运行的情况也不一样,接下来以一般查找和折半查找为例,进行数组查找操作的回顾:         
  1. public class ArrayDemo2 {

  2.         public static void main(String[] args) {
  3.                 //定义一个数组
  4.                 int[] arr=new int[]{12,31,53,11,7,101};
  5.                 //使用自定义的一般查找方法:
  6.                         search(arr,28);
  7.                 //使用自定义的折半查找方法并输出:
  8.                         System.out.println("利用折半查找所找元素的下标为:"+halfsearch(arr,53));
  9.                 //使用自定义的第二种折半查找方式:
  10.                         System.out.println("利用第二种折半查找方式所查找元素的下标为:"+halfsearch_0(arr,12));
  11.         }
  12.         /*
  13.          * 数组的查找操作:给出一个数,在数组中找到相应数并明确其位置。
  14.          * 对数组进行遍历,找到相同数并告知其角标,数则找出。
  15.         */
  16.                 public static void search(int[] arr,int key)
  17.                 {        
  18.                         int a=0;
  19.                         for (int x=0;x<arr.length ;x++ )
  20.                         {        
  21.                                 if (arr[x]==key)
  22.                                 {   if (a>0)
  23.                                                 System.out.print("和"+x);
  24.                                         else
  25.                                                 System.out.print("所要查找的数角标为:"+x);
  26.                                         a++;
  27.                                 }
  28.                         }
  29.                         if (a==0)
  30.                                 System.out.print("所要查找的数不存在");
  31.                         System.out.println();
  32.                 }

  33.         /*折半查找:查找的数组中数据必须是顺序的,先从中间数查起,与所找数比较大小:
  34.          * 如果中间数比所找数大,则再将中间数上 一位和第一位数之间数再折半查找;
  35.          * 反之,如果中间数比所找数小,则将中间数下一位与最后一位数再折半查找;
  36.          * 优点:提高了效率,但是必须要保证该数组是有序的数组。
  37.         */
  38.         public static int halfsearch(int[] arr,int key)
  39.         {
  40.                 int min=0,max=arr.length-1,mid;
  41.                 mid=(min+max)/2;//先找出中间角标
  42.                 while (arr[mid]!=key)
  43.                 {        
  44.                         if (arr[mid]>key)//如果中间角标对应的元素比所要查找数大,则所查找数在0至mid-1之间角标对应数之间
  45.                                 max=mid-1;
  46.                         else if (arr[mid]<key)//如果中间角标对应的元素比所要查找数小,则所查找数在mid+1至max之间角标对应数之间
  47.                                 min=mid+1;
  48.                         mid=(min+max)/2;//再继续折半
  49.                         if (min>max)//min>max时,说明查找数不在数组之列
  50.                                 return -1;
  51.                 }
  52.                 return mid;
  53.         }
  54.         /*
  55.          * 折半查找的第二种方式:
  56.         */
  57.         public static int halfsearch_0(int[] arr1,int key)
  58.         {
  59.                 int min=0,max=arr1.length-1,mid;
  60.                 while (min<=max)//现将min<=max作为循环条件
  61.                 {
  62.                         mid=(min+max)/2;//再依次做出如上之判断
  63.                         if (key>arr1[mid])
  64.                                 min=mid+1;
  65.                         else if (key<arr1[mid])
  66.                             max=mid-1;
  67.                         else
  68.                                 return mid;
  69.                 }
  70.                 return -1;//不满足循环条件,则输出为-1(查找数不在数组之列)
  71.                 }
  72. }
复制代码
运行结果:


          后面我会发每章节回顾的程序,如果你们觉得有可看性的话就继续关注吧~~谢谢各位了。   
   

评分

参与人数 1黑马币 +3 收起 理由
uniceguy + 3 很给力!

查看全部评分

2 个回复

倒序浏览
这么好的主题怎么没人顶?
回复 使用道具 举报
值得学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马