二分查找法查找数组元素下表
这方法是在学习C++的时候看到的 然后我把他改装成js的了,算法不分语言的,
使用该方法前要对数组进行排序, 下面对数组排序
/* * 对数组排序 冒气泡发 * + 张建军 + * * list 数组 * ntype 0为正序 */ function ArraySort(list, ntype) { var temp = ""; var max = 0; while (max < list.length) { for (var j = max + 1; j < list.length; j++) { if (list[j] > list[max] && ntype == "1") { temp = list[max]; list[max] = list[j]; list[j] = temp; } else if (list[j] < list[max] && ntype == "0") { temp = list[max]; list[max] = list[j]; list[j] = temp; } } max = max + 1; } return list; }
上面的排序是普通的冒气泡法,排序后然后就可以使用下面的方法了
下面的当长度小于3的的是就不执行了,因为长度太小了是用普通的方法还快一些
/* * 匹配数组元素位置,二分查找法,使用前需要对数组排序 * + 张建军 + * * list 数组 * val 查找元素 * 找到即返回下标,没找到反回插入点 */ function SearchKey(list, val) { //判断正烦序 var sort = 0; //0 默认正序 if (list.length >= 3) { if (list[0] > list[list.length - 1]) { sort = 1; } } var intlow = 0; var intHigh = list.length - 1; var result = ""; while (intHigh >= intlow) { var intMid = parseInt((intlow + intHigh) / 2); if (val > list[intMid]) { if (sort == 0) { intlow = intMid + 1 } else { intHigh = intMid - 1; } } else if (val == list[intMid]) { return intMid; } else if (val < list[intMid]) { if (sort == 0) { intHigh = intMid - 1; } else { intlow = intMid + 1 } } } return -intlow; }