首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

二分查找实现查找旋转数组中最小值,java实现,小弟我的代码有什么有关问题

2013-10-02 
二分查找实现查找旋转数组中最小值,java实现,我的代码有什么问题?/** ** 题目:旋转数组的最小数字 * 把一

二分查找实现查找旋转数组中最小值,java实现,我的代码有什么问题?


/**
 * 
 * 题目:旋转数组的最小数字
 * 把一个数组最开始的若干个元素搬到数组的末尾,我们
 * 称之为数组的旋转。输入递增排序的数组的一个旋转,
 * 输出旋转数组的最小元素。
 * @author solomon
 *
 */

public class BinarySearch
{
public int min(int[] number)
{
//判断数组是否为空
if (null == number)
{
System.out.println("数组为空");
return 0;
}

int index1 = 0;   //指向数组第一个元素的索引
int index2 = number.length - 1;  //指向数组最后一个元素的索引
int indexMid = index1;   //二分查找要指向的中间元素的索引,初始化为0
while (number[index1] >= number[index2])
{
if (1 == index1 - index2)
{
indexMid = index2;
break;
}

indexMid = (index1 + index2) / 2;

if (number[index1] == number[index2] 
&& number[index1] == number[indexMid] 
&& number[index2] == number[indexMid])
{
return minInOrder(number, index1, index2);
}

if (number[indexMid] >= number[index1])
{
index1 = indexMid;
}

if (number[indexMid] <= number[index2])
{
index2 = indexMid;
}
}
return number[indexMid];
}

//当number[index1],number[index2]和number[indexMid]相等的时候,需要使用顺序查找来找到最小值
public int minInOrder(int[] number, int index1, int index2)
{
int result = number[index1];  //要查找的值
for (int i=index1+1; i<=index2; i++)
{
if (result > number[i])
{
result = number[i];
}
}
return result;

}

}



测试类


public class BinarySearchTest
{
public static void main(String[] args)
{
BinarySearch search = new BinarySearch();
int[] number = new int[]{3,4,5,1,2};
int min = search.min(number);
System.out.println("数组中最小值为:" + min);
}
}



编译没有问题,可是最后出不了结果,CPU负载过重,电脑发烫,感觉是逻辑上的问题,大神给我解答一下哈 二分查找 java
[解决办法]
口算了一下,你无限循环了啊,index1 =2,index2=3之后,每次while之后都是

            if (number[indexMid] >= number[index1])
            {
                index1 = indexMid;
            }
             

这一句成立而已了。
[解决办法]
你输入的是数组是{3,4,5,1,2} ,没排序,怎么能用二分法都查找呢,只是找最小值,一次遍历就可以了

热点排行