這一節,請看前章。
通過前節,我們知道什麼是二分法了。
那麼問題就來了,前面二分法把中間值作為分值,那麼這種效率是否高呢?
比如說1到100的乙個陣列,我需要找的是100,那麼二分法要分很多次。
這時候我們需要找規律了,這是我們發現均勻分布的,那麼是否可以通過比例的值來接近。
比如說把mid 設定成 mid=left+(right-left)*[(findval-arr[left])/arr[left]-arr[right]]
這樣子就可以接近於正確值,也就是說每一次過濾的值越多。
**:
static int num;
static void main(string args)
listlist = binarylistsearch(arr, 0, arr.length - 1, 100);
foreach (var u in list)
console.writeline("一共多少次遞迴:"+num);
console.readkey();
}public static listbinarylistsearch(int arr, int left, int right, int findvalue)
} result.add(temp);
for (int i = temp + 1; i < arr.length; i++)
}} return result;
}public static int binarysearch(int arr, int left, int right, int findvalue)
int mid = left + (right - left) * ((findvalue - arr[left]) / (arr[right] - arr[left]));
if (findvalue > arr[mid])
else if (findvalue < arr[mid])
else
}
結果:
可以看出效率大大提高,所以我們也應該適當的調一調引數。
重新整理資料結構與演算法 二分查詢法 十二
什麼是二分查詢呢?直接給乙個位址哈,避免誤解。二分法查詢 9751511 1 根據我發的這個鏈結呢?我們知道通過二分查詢一定有乙個硬性要求,那就是說一定要按照某種順序排列,不一定是大小。比如說有乙個陣列為 如果如果你要查詢100,如果按照遍歷的話,那麼要到最後乙個。如果通過二分法,那麼第乙個比較的就...
二分查詢與插值查詢
二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。1 確定排序好的陣列的中間位置mid left right 2 left 0,right n 1 將陣列分為兩部分。2 用要t mid ...
資料結構與演算法 二分查詢
二分查詢的思想是在已經排序 公升序 的陣列中,如果要查詢的數比中位數小,那麼其位置只可能在左半部分,相反只能在右半部分。這樣每次把查詢區間縮小一半,比順序查詢效率快得多。非遞迴寫法 public static int binarysearchinasclooply int nums,int star...