本帖最后由 zhuohong_xiao 于 2014-7-22 16:26 编辑
- <div class="blockcode"><blockquote>/*
- 需求:
- 查找一个元素在数组中的位置
- */
- class ArrayTest01
- {
- public static void main(String[] args)
- {
- int [] arr={12,3,45,53,4,56,78,89,9};
- int [] arr1={1,2,33,45,66,76,79,345};
-
- //调用getIndex功能,查找45在数组arr中的位置
- int x = getIndex(arr,45);
- System.out.println(x);
-
- //调用getIndex_1功能查找33在数组arr1中的位置
- x = getIndex_1(arr1,33);
- System.out.println(x);
-
- //调用getIndex_2功能查找2在数组arr1中的位置
- x = getIndex_2(arr1,2);
- System.out.println(x);
- }
- //折中查找中间值查找的第一种方式
- //定义一个getIndex功能,对元素中的值进行折半查找
- public static int getIndex_1(int [] arr, int key)
- {
- //折半查找只能运用于有序的数组。无序的数组是不能使用的。
- int min=0;
- int max=arr.length-1;
- int mid=(min+max)/2;
- //判断中间值是否与key相等,如果相等,要查找的值就是中间值
- while(arr[mid]!=key)
- {
- //进行中间值的寻找的判断
- if (key>arr[mid])
- min=mid+1;
- else if (key<arr[mid])
- max=mid-1;
- //重新赋中间值。之后while会再次判断arr[mind]是否等于key。
- mid=(min+max)/2;
- if (min>max)
- return -1;
- }
- return mid;//当while不成立时返回的结果值
- }
- //折中查找中间值的第二种方式
- public static int getIndex_2(int [] arr, int key)
- {
- int min=0,max=arr.length-1,mid;
- while (min<=max)
- {
- mid=(min+max)/2;
- if (key>arr[mid])
- {
- min=mid+1;
- }else if (key<arr[mid])
- {
- max=mid-1;
- }else return mid;
- }
- return -1;
- }
- //定义一个功能查找数在数组中的位置,数组的位置是用脚标表示
- public static int getIndex(int [] arr, int key)
- {
- //要查找数组中的元素就要使用到for语句进行遍历
- for (int x=0; x<arr.length; x++)
- {
- //判断数值中俄值是否与key相等。相等的话就返回该数组的脚标值。也就得到了元素在数组中的位置
- if (arr[x]==key)
- {
- return x;
- }
- }
- //当元素在数组中找不到的时候,返回一个-1。表明在数组中找不到这个元素。
- return -1;
-
- }
- }
复制代码
结果显示未
2
-1
0
结果显示错误.那位雷锋可以告诉我错在哪里.谢谢.
出的问题。我已经找到。上面代码我也改正。 谢谢楼下的哥们提醒。谢谢啊
|
|