二分法查找数据适合有序数组,对海量数据处理较为优秀,简单易于维护。
它的运行时间与个数的比例公式为: T=K*log2(N) K为常数。
例如:1~100的有序数组查询一个数据基本最多7次。log2(100);
以下为程序(只写了一个,没有采用多态,如果需要自行更改):
/** * Edwin开发包 */ package com.edwin.cn; /** * 排序数组二分查找法,如果数据中有重复数据则返回第一个出现的数据位置 * @author Edwin * @version 1.1 */ public class OrdArray { /** * 排序数组二分查找法,如果数据中有重复数据则返回第一个出现的数据位置,如果没有查询到则返回数组元素个数。 * @param lngSearchKey为须要查找的元素 * @param lngArr为须要查找的数组 * @return 元素的位置,如果没有查询到则返回数组元素个数。 */ public int find(long lngSearchKey,long[]lngArr) { int intLowerBound = 0; int intUpperBound = lngArr.length-1; int intElems=lngArr.length; int intCurIn=0; while(true) { intCurIn = (intLowerBound + intUpperBound ) / 2; if(lngArr[intCurIn]==lngSearchKey){ return intCurIn; } else if(intLowerBound > intUpperBound){ return intElems; } else { if(lngArr[intCurIn] < lngSearchKey) intLowerBound = intCurIn + 1; else intUpperBound = intCurIn - 1; } // end else divide range } // end while } // end find() }