本帖最后由 龙卷风V龙卷风 于 2012-8-3 10:08 编辑
//楼主,在给定的数组中查找给定的数字,我给你修改了下,你比较你源代码看下.................
//原数组{1,5,7,8,9,5,7},假如这里要查找8,...............
//折半查找法的一个前提是必须对数组进行排序,然后才能折半法............................
//楼主所以你还得定义一个排序的方法,当然楼主的打印方法也写错了,我给你修改了,你卡看..........................
public class BSort2
{
//定义一个排序的方法...............................................
public static void paixu(int [] str){
//用冒泡排序法排序...........................................
for (int i = 0; i < str.length; i++){
for (int j = str.length-1; j > i; j --){
if (str[j] < str[j-1]){
int temp = str[j];
str[j] = str[j-1];
str[j-1] = temp;
}
}
}
}
//对查找的方法进行修改。。。。。。。。。。。。。
public static void select(int[]arr,int key)//定义函数,将数组与指定的数字传进去
{
int min,max,mid;
min=0;
max=arr.length;
mid=(min+max)/2;
//这里修改这条语句。。。。。。。。。。。。。。
//while(key!=mid)
while(true)
{
//这里修改这条语句。。。。。。。。。。。。。。
//if (key>mid)
if (key > arr[mid])
{
min=mid+1;
}
else
{
max=mid-1;
}
//增加2条if语句
if (key == arr[mid]){
System.out.println("要查找的关键字 \"" + key + "\" 存在;\n它在排序后数组中的第"+(mid+1)+"个位置");
break;
}
if (min > max){
System.out.println(key + "关键字不存在");
break;
}
mid=(min+max)/2;
//这里去掉这条语句。。。。。。。。。。。。。。。。。。。
// return mid;
}
//这里去掉这条语句。。。。。。。。。。。。。。。。。。。
// return -1;
}
public static void main(String[] args)
{
int[] arr={1,5,7,8,9,5,7};
//打印排序前的数组。。。。。。。。。。。。。
System.out.println("排序前的数组");
PrintAarr(arr);//调用打印数组的方法
//调用排序方法。。。。。。。。。。。。。。。。。。。。
paixu(arr);
//打印排序后的数组。。。。。。。。。。。。。
System.out.println("排序后的数组");
PrintAarr(arr);//调用打印数组的方法
select(arr,8);//调用查找的方法
}
//打印方法楼主也写错了,我做了修改...............
public static void PrintAarr(int[]arr)//定义打印数组中各值的方法,通过遍历的形式
{
System.out.print("[ ");
for(int x=0;x<arr.length;x++)
{
if (x < arr.length-1)
{
//这里不是输出x,修改。。。。。。。。。。。
//System.out.print(x+" , ");
System.out.print(arr[x]+" , ");
}
else
{
//System.out.println(x+" ]");
System.out.println(arr[x]+" ]");
}
}
}
}
|
|