二分法查找算法:
採用二分法查找時,數據需是排好序的。
主要思想是:(設查找的數組區間爲array[s, e])
(1)肯定該區間的中間位置m
(2)將查找的值T與array[m]比較,若相等,查找成功返回此位置;不然肯定新的查找區域,繼續二分查找。
區域肯定以下:
這裏設array從小到大排列,
array[m]>T由數組的有序性可知array[m,……,e]>T;
故新的區間爲array[s,……,m-1],
相似上面查找區間array[s,……,m-1]。
每一次查找與中間值比較,判斷是否查找成功,不成功當前查找區間縮小一半,循環查找,便可。
時間複雜度:O(log2n)。算法
let arr = [0, 1, 2, 4, 5, 6, 7, 8]; let arr2 = [88, 77, 66, 55, 44, 33, 22, 11]; BinarySearch(arr2, 77); BinarySearch(arr, 2); function BinarySearch(arr, target) { let s = 0; let e = arr.length - 1; let m = Math.floor((s + e) / 2); let sortTag = arr[s] <= arr[e];//肯定排序順序 while (s < e && arr[m] !== target) { if (arr[m] > target) { sortTag && (e = m - 1); !sortTag && (s = m + 1); } else { !sortTag && (e = m - 1); sortTag && (s = m + 1); } m = Math.floor((s + e) / 2); } if (arr[m] == target) { console.log('找到了,位置%s', m); return m; } else { console.log('沒找到'); return -1; } }