更多查找可以参考 http://www.cnblogs.com/liuling/p/2013-7-24-01.html 这是别人的资源,感觉写的很全。可以仔细研究一下。
/*
使用折半查找的前提是数据是有序(升序)的。
*/
class HalfSearchDemo
{
public static void main(String[] args)
{
int[] arr={1,2,3,6,2,3,5,1,8,9,3,5,2};
sop("关键字的位置:"+halfSearch_2(arr,6));
System.out.println("Hello World!");
}
public static int halfSearch_2(int[] arr,int key){
SearchSort(arr);
int max=arr.length-1,min=0,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 void PubbleSort(int[] arr) //冒泡排序,首先确定最后一个位置上的元素
{
for(int i=0;i<arr.length-1;i++)
{
for(int j=0;j<arr.length-1-i;j++)
{
if(arr[j]>arr[j+1])
{
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(int k=0;k<arr.length;k++)
sop(arr[k]);
}
public static void SearchSort(int[] arr) //选择排序,首先确定第一个位置上的元素
{
for(int i=0;i<arr.length-1;i++)
{
for(int j=i+1;j<arr.length;j++)
{
if(arr[i]>arr[j])
{
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
for(int k=0;k<arr.length;k++)
sop(arr[k]);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
//下面是折半查找的另一种表现形式:
public static int halfSearch(int[] arr,int key){
SelectSort(arr);
int max=arr.length-1;
int min=0;
int mid=(max+min)/2;
while(arr[mid]!=key){
if(key>arr[mid])
min=mid+1;
if(key<arr[mid])
max=mid-1;
if(min>max)
return -1;//找不到目标元素
mid=(max+min)/2;
}
return mid;//跳出循环后,表明已经找到目标元素,此时返回目标元素的index。
}