//折半查找的两种方法
class HalfSearchDemo
{
public static void main (String [] args)
{
String aa = "abcdefhi";
int index = halfSearch(aa,'i');//我什么我字符串里的前面的每个字符都能查找到而最后一个'i'却不能?
System.out.println(index);
}
public static int halfSearch(String aa,char key)
{
int max=aa.length()-1;
int min = 0;
int mid = (max+min)>>1;
while (aa.charAt(mid)!=key)
{
int num = new Character (key).compareTo(new Character (aa.charAt(mid)));
if(num>0)
min = (mid+1);
else if(num<0)
max=(mid-1);
mid = (max+mid)>>1;
if (min>max)
return -1;
}
return mid;
}
}
//第二种方法
//class HalfSearchDemo
//{
// public static void main (String [] arga)
// {
// String aa = "abcdefhik";
// int num = halfSearch(aa,'k');
// System.out.println (num);
// }
// public static int halfSearch (String aa , char key)
// {
// int max = aa.length()-1;
// int min = 0;
// int mid;
// while (min<=max)//等于的原因是长度是一呢?
// {
// mid = (min+max)>>1;
// int num = new Character (key).compareTo(new Character (aa.charAt(mid)));
// if (num>0)
// min = mid+1;
// else if (num<0)
//
// max = mid-1;
// else
// return mid;
//
//
// }
// return -1;
// }
//}
我的问题是aa字符串唯独最后一个查找不出来,求解
class HalfSearchDemo
{
public static void main (String [] args)
{
String aa = "abcdefhi";
int index = halfSearch(aa,'i');//我什么我字符串里的前面的每个字符都能查找到而最后一个'i'却不能?
System.out.println(index);
}
public static int halfSearch(String aa,char key)
{
int max=aa.length()-1;
int min = 0;
int mid = (max+min)>>1;
while (aa.charAt(mid)!=key)
{
int num = new Character (key).compareTo(new Character (aa.charAt(mid)));
if(num>0)
min = (mid+1);
else if(num<0)
max=(mid-1);
mid = (max+mid)>>1;
if (min>max)
return -1;
}
return mid;
}
}
//第二种方法
//class HalfSearchDemo
//{
// public static void main (String [] arga)
// {
// String aa = "abcdefhik";
// int num = halfSearch(aa,'k');
// System.out.println (num);
// }
// public static int halfSearch (String aa , char key)
// {
// int max = aa.length()-1;
// int min = 0;
// int mid;
// while (min<=max)//等于的原因是长度是一呢?
// {
// mid = (min+max)>>1;
// int num = new Character (key).compareTo(new Character (aa.charAt(mid)));
// if (num>0)
// min = mid+1;
// else if (num<0)
//
// max = mid-1;
// else
// return mid;
//
//
// }
// return -1;
// }
//}
我的问题是aa字符串唯独最后一个查找不出来,求解
解决方案 »
- 关于timer类的疑问 100分!
- 求救~linux系统下用java编写一个内存测试程序,算出cpu的miss rate等一大堆数据
- 求助!菜鸟新学JAVA运行程序时出现错误!!!
- java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] 语法错误 (操作符丢失)
- java学习路径
- Struts动态form如何实现!!!!!
- skycncomp(早知道今日的离别,你还愿意昨日的相逢吗),不如来这里领分?
- JB的进来看一看.急,在线等,谢谢!
- 和汉字有关的问题
- 帮我看看这个doGet有什么问题好吗??
- 继承的一点疑问,javap分析字节码
- 求助,我一个简单的类的代码,但是为何部署的时候报错
循环中的这句话应该写错了吧?
mid = (max+mid)>>1;
是否应为:
mid = (max+min)>>1;