社長,乙個愛學習,愛分享的程式猿,始終相信,付出總會有回報的。知識改變命運,學習成就未來。愛拼才會贏!目錄前言:一 什麼是二分法查詢?
二 實現思路
分三種情況:
學習中遇到問題後,我們應該如何處理?
二分法查詢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.使用...