演算法學習 四 二分法查詢 折半法或者折半查詢

2021-10-02 07:14:16 字數 2615 閱讀 5477

社長,乙個愛學習,愛分享的程式猿,始終相信,付出總會有回報的。知識改變命運,學習成就未來。愛拼才會贏!
目錄前言:一 什麼是二分法查詢?

二 實現思路

分三種情況:

學習中遇到問題後,我們應該如何處理?

二分法查詢2種實現方式

非遞迴方式

遞迴方式

效能對比分析:

二分法也可以叫折半法,他是一種一種查詢效率較高的方法。適用於資料量較大時,但是需要資料先排好順序。

小結:遇到效率高,我們就應該引起注意,就跟arraylist一樣,他的查詢效率高,但是只適合於單執行緒,因為他執行緒不安全。遇到類似的問題,我們應該多反問(社長的一萬個為什麼),多思考。多想想,他是不是有什麼缺陷或者前提。

乙個班的成績有高有低,從低到高排序 50 56 60 70 80 90 92 94 98

因為是二分,每次取一般,這裡先定義三個變數header mid footer,注意是對應值的下標。

第一種:相等,表示找到了。

我要找的值就是80。mid對應的值,剛好與我要查的值相等。就沒有必要繼續往下走。

第二種:需要查詢的值小於mid,footer=mid-1

劃重點上一次的mid是4,值為80,為什麼上面畫的圖沒有80?

在第一種情況裡面已經判斷過,那我們為什麼還需要再判斷一次勒,你們說是不是這個道理。覺得對的社友扣666。

有些有著求知慾的社友,又開始問了,header為,footer為3,mid咋是1,不應該是1.5嗎?

社長我也不知道為什麼是1。(0+3)/2 就是1。可以先去檢視一下基礎。

第三種:需要查詢的值大於mid,header=mid+1

我發現有不少社友都繼承了社長的一萬個為什麼,首先,積極提出問題,這點值得表揚。社長工作也有一段時間了,遇到問題,發現,大致的人群可以分為3種。

按王者榮耀的術語做乙個級別劃分

第一種,不敢請教別人,怕暴露自己的真實水平,同事之間,遇到不少這種,建議,有可能你乙個問題,卡了幾天,別人給你一分鐘指導,就幫你解決了。 青銅選手

第二種,敢於請教,但不思。 遇到問題,需要虛心的請教別人,但是,自己不多思,多查。 **選手

第三種:多思多查敢於請教。 **選手

package com.fyqd.test.sort;

/** * description:不使用遞迴方式

* author: 程式猿學社

* date:  2020/1/18 21:38

* modified by:

*/public class binarytest 

if (value > array[middle]) 

if (value 

}return -1;

}public static void main(string args) ;

int score = 60;

int value = binary(a,score);

if(value == -1)else}}

package com.fyqd.test.sort;

/** * description:使用遞迴方式

* author: 程式猿學社

* date:  2020/1/18 21:38

* modified by:

*/public class binarytest1 

public static int search(int array, int value,int header,int footer)

int middle = (header + footer) / 2;

if (value == array[middle]) else if (value > array[middle]) else

};public static void main(string args) ;

int score = 980;

int value = binary(a,score);

if(value == -1)else}}

注意:使用遞迴方式,一定要給出終止條件名稱時間複雜度

空間複雜度

描述普通排序

o(n)

o(1)

通過for迴圈乙個個查詢

二分法非遞迴方式

o(logn)

o(1)

二分法使用遞迴方式

o(logn)

o(1*logn)

每次呼叫開銷1,重複呼叫logn次,每次需要額外的開闢空間

二分法非遞迴方式效能最優,為什麼

《演算法學習》 一:為什麼要學習演算法?時間複雜度

歷史演算法文章推薦:

《演算法學習》二 氣泡排序分析

【演算法學習】三 選擇排序分析

折半查詢法 二分法

在有序 設為公升序 表中,取中間元素作為比較物件,若給定值與中間元素的關鍵字相等,則查詢成功 若給定值小於中間元素的關鍵字,則在中間元素的左半區繼續查詢 若給定值大於中間元素的關鍵字,則在中間元素的右半區繼續查詢。不斷重複上述查詢過程,直到查詢成功,或所查詢的區域無該資料元素,查詢失敗。測試資料 1...

演算法學習 二分法查詢

二分法查詢是常用的查詢方法。二分法的演算法複雜度為 二分法查詢的思路是 1 輸入乙個排序好的序列 2 輸入乙個需要查詢的元素 3 求出序列的中間位置數 4 判斷查詢元素的與中間數的大小 5 縮小查詢範圍,可進行迭代或者迴圈。c語言 include 遞迴演算法 int recurbinary int ...

查詢 二分法查詢 折半查詢法

實現查詢指定數值在元素有序的陣列中儲存的位置 索引 返回該位置 索引 解題步驟 1.定義3個用來記錄索引值的變數,變數min記錄當前範圍最小索引值,初始值為0 變數max記錄當前範圍最大索引值,初始值為陣列長度 1 變數mid記錄當前當前範圍最中間元素的索引值,初始值為 min max 2 2.使用...