您的位置:首页 > 其它

[code]二分法:从已排好序的String数组中查询要搜索的字符串的下标

2010-05-07 15:00 471 查看
package utils.find;
import java.lang.reflect.Array;
/**
* ArrayUtil <br/>
* Generated on: 2010.05.07
*
* @author loocao
*/
public class ArrayUtil {
/**
* @param args
*/
public static void main(String[] args) {
String[] arrString = new String[] { "abc0", "cde1", "efg2", "hij3",
"lmn4", "opq5", "rst6", "uvw7", "xyz8" };
String findStr = "rst6";
System.out.println(indexOfStringArray(arrString, findStr));
}
/**
* 从已排好序的String数组中查询要搜索的字符串的下标
*
* @param args
*            已经排序的字符串数组
* @param findStr
*            要查找的字符串
* @return 字符串所在<b>下标<b>
*/
public static int indexOfStringArray(String[] args, String findStr) {
if (findStr == null || args == null || args.length == 0)
return -1;
int index = args.length % 2 == 0 ? args.length / 2
: (args.length - 1) / 2;
if (args[index].equals(findStr)) {
return index;
} else {
int temp, result = 0, start = 0, length = 0;
if (findStr.compareTo(args[index]) < 0) {
start = 0;
length = index;// index之前的数组长度
temp = indexOfStringArray(subArray(args, start, length),
findStr);
result = temp;
} else if (findStr.compareTo(args[index]) > 0) {
start = index + 1;
length = args.length - start;// index之后的数组length
temp = indexOfStringArray(subArray(args, start, length),
findStr);
if (temp == -1)
result = temp;
else
result = temp + index + 1;
}
return result;
}
}
/**
* 截取数组
*
* 感谢enihs( http://hi.csdn.net/shine333 )指点,
* System.arraycopy: http://doc.java.sun.com/DocWeb/api/java.lang.System?lang=zh_cn&mode=Read#T3 *
* @param c
*            args数组中元素的类型class
* @param args
*            要截取的数组
* @param start
*            开始下标
* @param length
*            要复制的数组长度
* @return args 中下标从 start 到 start+length-1 的数组
*/
@SuppressWarnings("unchecked")
public static <T> T[] subArray(T[] args, int start, int length) {
T[] temp = (T[]) Array.newInstance(args.getClass().getComponentType(),
length);
// for (int i = start; i <= start + length - 1; i++) {
// temp[i - start] = args[i];
// }

// 将数组args从start到length-1复制到temp中,由enihs指点
System.arraycopy(args, start, temp, 0, length);
return temp;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐