重新整理資料結構與演算法 插值二分查詢法 十三

2022-03-02 06:17:34 字數 1044 閱讀 4375

這一節,請看前章。

通過前節,我們知道什麼是二分法了。

那麼問題就來了,前面二分法把中間值作為分值,那麼這種效率是否高呢?

比如說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...