----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
</pre><pre class="java" name="code">/*
需求:数组的一般查找
思路:
定义一个函数,实现查找功能
对查找数与数组进行比较,如果相同返回角标,如果没有返回-1
在主函数中调用函数
步骤:
1,定义一个函数getIndex(),返回类型是int,参数是int key,int[] arr.
2,用for循环结构用key与每个数组元素进行比较,如果相同直接返回角标值,
如果没找到返回-1.
*/
/*
需求:折半查找
思路:
1.定义一个函数,实现查找功能。
2,定义三个变量min ,max,mid(中间位)
3,用查找数与mid的值进行比较,大于的话min=mid+1,小于的话max=mid-1;
4.如果查找数存在值放回mid,如果不存在则放回-1
步骤:
1.定义函数getIndex_2(),返回类型int,参数int[] arr,int key;
2,定义三个变量min,max,mid(存储中间角标)
3,用while循环判断,比较key与arr[mid]是否相等。
4,不相等的话,比较key与arr[mid]的大小,
大于的话min=mid+1,小于的话max=mid-1;在求出mid的值
相等的话直接放回mid
*/
class ArraySearch
{
//折半查找方式(必须是顺序数组)
public static int hashSerach(int[] arr,int key)
{
//第二种思路
int min=0,max=arr.length-1;
int mid=(min+max)/2;
while(max>=min)//比较角标,如果max<min直接返回-1
{
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
else
return mid;
mid=(min+max)/2;
}
return -1;
/*第一种思路:
int min=0,max=arr.length-1;
int mid=(min+max)/2;
while(key!=arr[mid])//比较key与arr[mid],相等返回mid
{
if(max>=min)
{
if(key>arr[mid])
min=mid+1;
else max=mid-1;
mid=(min+max)/2;
}else return -1;
}
return mid;
*/
}
//一般查找方式
public static int getIndex(int[] arr,int key)
{
for(int i=0;i<=arr.length-1;i++)
{
if(key==arr[i])
{
return i;
}
}
return -1;
}
public static void main(String[] args)
{
int[] arr={1,2,3,5,6,9,10,14};
int index= hashSerach(arr,2);
System.out.println("Index="+index);
}
}