黑马程序员-数组的查找操作

----------- 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);
	}
}



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章