黑马程序员技术交流社区
标题:
代码练习题之数组的基本查找和高级二分查找
[打印本页]
作者:
huang_bing_hua
时间:
2016-2-28 15:23
标题:
代码练习题之数组的基本查找和高级二分查找
package cn.itcast_04;
/*
* 二分法查找给定的有序数组中特定元素所在索引
* 分析步骤:
* A:定义一个有序的数组
* B:定义最大索引,定义最小索引
* C:计算出中间索引
* D:拿中间索引值与value比较
* 如果不同
* 大了 在左边找
* 小了 在右边找
* 如果相同 返回中间索引值
* E:重新计算索引
* 大了 max = mid -1 (因为比过的我们就不用再看了)
* 小了 min = mid +1
* F:回到第三步
* 注意:(给定的数组如果有序,用二分查找;
* 如果无序,用基本查找,因为如果你先排序的话,你就是人为的改变了原始数组的元素索引值)
*/
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = { 13, 56, 67, 89, 90 };
int index = getIndex(arr, 67);
System.out.println("有序数组中67这个元素的索引值是:"+ index);
int[] arr1 = {67,56,13,90,89};
int index2 = getIndex2(arr1,67);
System.out.println("无序数组中67这个元素的索引值是:"+ index2);
}
public static int getIndex2(int[] arr, int value) {
//针对所要查找的元素不存在,我先假设不存在,给返回值定为-1
int index =-1;
for (int x=0;x<arr.length;x++) {
if (arr[x] == value) {
//一旦存在改变索引,并退出遍历
index = x;
break;
}
}
return index;
}
public static int getIndex(int[] arr, int value) {
int min = 0;
int max = arr.length - 1;
int mid = (min + max) / 2;
while (arr[mid] != value) {
if (arr[mid] > value) {
max = mid - 1;
} else {
min = mid + 1;
}
//针对所要查找的元素不存在
if (min > max) {
return -1;
}
mid = (min + max)/2;
}
return mid;
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2