二分查找法查找数组元素下表
这方法是在学习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;}