折半查找
// 折半查找 public static final int FIND_OK = 1; public static final int FIND_FAIL = -1; public static int binarySearch(int[] array, int keyValue) { if (array == null || array.length == 0) { returnFIND_FAIL ;
}
int posLow = 0; int posHei = array.length - 1; while (posLow <= posHei) { if (array[posLow] == keyValue || array[posHei] == keyValue) { return FIND_OK; } int middlePos = posLow + ((posHei - posLow) / 2); if (array[middlePos] == keyValue) { return FIND_OK; } else { if (array[middlePos] < keyValue) { posLow = middlePos + 1; } else { posHei = middlePos - 1; } } } return FIND_FAIL; }
虽然简单但有几点注意:
1.方法要做的事,第一任务是判断参数有效性。
2.考虑是否溢出。
3.可读性变量命名,返回值设置。
// 折半查找 public static RESULT binarySearch(int[] array, int keyValue) { if (array == null || array.length == 0) { return RESULT.ERROR_PARAM; } int posLow = 0; int posHei = array.length - 1; while (posLow <= posHei) { if (array[posLow] == keyValue || array[posHei] == keyValue) { return RESULT.FIND_OK; } int middlePos = posLow + ((posHei - posLow) / 2); if (array[middlePos] == keyValue) { return RESULT.FIND_OK; } else { if (array[middlePos] < keyValue) { posLow = middlePos + 1; } else { posHei = middlePos - 1; } } } return RESULT.FIND_FIAL; }
enum RESULT {
FIND_OK, FIND_FIAL, ERROR_PARAM
}