日期:2014-05-20  浏览次数:20961 次

题目求解
给定一个无序的数字数组,编写程序实现:按照二分法查找给定的字符串,并输出查找的顺序。
------解决方案--------------------
.....这个,随便去Google一下到处都有吧
------解决方案--------------------
本来想说“先把无序变有序,然后二分。”
后来看你这个意思是要具体代码,那我还是路过吧。
------解决方案--------------------
因为二分查找要求数值必须是有序的,因此我先用冒泡排序;接着进行二分查找;
代码是我临时用java写出来的,希望对你有帮助!不懂的地方我们再商量!
import java.util.Scanner;

/*
 * 折半查找**/
public class Search_Middle {

/**
 * @param args
 */
/*冒泡排序*/
public static int[] bubblesort(int[] list,int[] index)
{
boolean needNextPass=true;
for(int k=1;k<list.length;k++)
{
//array may be sorted and next pass not needed
needNextPass=false;
for(int i=0;i<list.length-k;i++)
{
if(list[i]>list[i+1])
{
int in=index[i];
index[i]=index[i+1];
index[i+1]=in;
int t=list[i];
list[i]=list[i+1];
list[i+1]=t;
needNextPass=true;//next pass will needed
}
}
}
return index;
}
/*
 * *折半查找(二分查找)*/
public static int search_middle(int[] b,int key)
{
int low,high,mid=0;
low=1;
high=b.length;
while(low<high){
mid=(low+high)/2;
if(key==b[mid])  return mid;
else if(key<b[mid])
{
high=mid-1;
}
else
low=mid+1;
}
return mid;
}

public static void main(String[] args) {
// TODO Auto-generated method stub
int k=0;
int[] a=new int[]{10,1,5,0,4,3,2};//无序的数组
int[] b=new int[]{1,2,3,4,5,6,7};//无序数组中个元素的索引值
bubblesort(a,b);//调用排序函数,将无序数组变成按升序排列
/*
 * 输出排序后a,b数组的值进行验证
 * **/
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+" ");
}
System.out.println();
for(int i=0;i<b.length;i++)
{
System.out.print(b[i]+" ");
}
System.out.println();
System.out.println("请输入你要查找的数据: ");
Scanner reader=new Scanner(System.in);
int w=reader.nextInt();
System.out.println("查找到的结果如下: ");
k=search_middle(a,w);//查找数据在排好序的数组中的索引
//System.out.println(k);
System.out.println(b[k]);
}
}