最近没有管理好自己的情绪,哎...
上班之余,研究一下算法也不错,本人比较喜欢数学,只要被让我被英文单词怎么都好,哈哈,研究算法算是本人的小爱好吧,做好每天从头开始的准备,从头开始,今天就从二分查找开始.
二分查找又称折半查找,查找的速度比较快,次数比较少,性能比较好,但是二分查找一般是对已经排过序的进行查找,相对来说插入和删除比较不好操作.今天就以一个小的例子来研究一下二分查找
已知数组data={12,14,18,23,26,27,33,45,66,78,98},使用二分法查找98所在的位置:
下面是我写的代码进攻参考,你也可以使用其他方法,当然这里既然说的是二分查找,你就别用那种挨个比较的方法了.
package com.sd.thea.guo;
/**
* @author 子墨
*
* 2015-2-1下午5:00:31
*/
public class BinarySearch {
/**
* @param goal 查找的目标数
* @param data 查找的数组
* @return
*/
public static int rank(int goal, int[] data) {
int start = 0;
int end = data.length - 1;
while (start <= end) {
int mid = start + (end - start) / 2;
if (goal<data[mid]) {
end=mid-1;
}else if (goal>data[mid]) {
start=mid+1;
}else {
return mid;
}
}
return -1;
}
/**
* @param args
*/
public static void main(String[] args) {
int[] data={12,14,18,23,26,27,33,45,66,78,98};
System.out.println(rank(98, data));
}
}
简单介绍一下rank()方法,先获得中间下标,如果中间数比要找的数值大,继续查找左半段,否则查找右半段,如果输出的是-1,说明没有找到!
算法是本人的爱好,后续继续更新,从最简单的开始,还有就是本人用Java实现的,你也可以用C等,这个随意...共同交流,一起进步