二分查找法怎樣查找長度大于4的數(shù)字。
在有序表a[1…20]中,按二分查找方法進行查找,查找長度為4的元素的下標從小到大依次是10,5,3,4。
二分查找是將表中間位置記錄的關(guān)鍵字與查找關(guān)鍵字比較,如果兩者相等,則查找成功;否則利用中間位置記錄將表分成前、后兩個子表,如果中間位置記錄的關(guān)鍵字大于查找關(guān)鍵字,則進一步查找前一子表,否則進一步查找后一子表。
重復(fù)以上過程,直到找到滿足條件的記錄,使查找成功,或直到子表不存在為止,此時查找不成功。因此為(1+20)/2取10,大于4,查1到10;(1+10)/2取5,大于4,查1到5;(1+5)/2取,取3,小于4,查3到5;(3+5)/2取4,找到4。
擴展資料:
二分查找法的基本思想是將n個元素分成大致相等的兩部分,取a[n/2]與x做比較,如果x=a[n/2],則找到x,算法中止;如果x<a[n/2],則只要在數(shù)組a的左半部分繼續(xù)搜索x,如果x》a[n/2],則只要在數(shù)組a的右半部搜索x。
二分查找法充分利用了元素間的次序關(guān)系,采用分治策略,可在最壞的情況下用O(log n)完成搜索任務(wù)。
【數(shù)據(jù)結(jié)構(gòu)】請教一道題,關(guān)于二分查找(折半查找)的平均搜索長度。
可以設(shè)這九個數(shù)依次為1-2-3-4-5-6-7-8-9,那么按照二分查找:第一次應(yīng)該找到的是[1+9]\/2=5(這就是說數(shù)字5搜索的長度為1);第二次可以找到2個數(shù)字是[1+5]\/2=3或[5+9]\/2=7(3和7的搜索長度為2);……第三次可以找到4個數(shù)字是2、4、6、8;第四次可以找到2個數(shù)字是1、9...
請問這道二分查找的平均長度為什么不能用公式直接算出?
設(shè)關(guān)鍵字個數(shù)為n,在各關(guān)鍵字等概率查找的前提下,1、順序查找的平均查找長度asl=(n+1)\/2,2、在n趨于無窮大時,折半查找的asl=((n+1)log2(n+1))\/n - 1,當(dāng)n大于50時,asl約等于log2(n+1)-1 3、設(shè)分塊查找中將長為 n 的表分成均等的 b 個塊,每塊 s 個元素,則 b = (n...
C語言,折半查找法(二分查找法),找到數(shù)列中的一個數(shù)。
根據(jù)需求,用二分法查找指定數(shù)組中的指定數(shù)字,代碼如下:include <stdio.h> \/\/ 在長度為len的數(shù)組a中尋找n,找到就返回數(shù)組下標,沒找到就返回-1 int search(int a[], int len, int n){ int index = -1;int left = 0, right = len, mid = (left + right) \/ 2;while (left <= ...
平均查找長度與元素個數(shù)無關(guān)的查找方法是( )。 A、二分查找 B、順序查 ...
【答案】:C 哈希表查找不以關(guān)鍵字的比較為基本操作,采用直接尋址技術(shù)。在理想的平均情況下,須任何比較,就可以找到待查關(guān)鍵字,查找的期望時間為(1)。
雙條件查找的6種方法
4. 斐波那契查找法:根據(jù)斐波那契數(shù)列生成黃金分割點,在其中查找目標值。5. 分塊查找法:將數(shù)據(jù)劃分為若干塊,每個塊內(nèi)部有序,因此可以通過塊和元素的值來確定目標元素的位置。6. 差值查找法:根據(jù)目標值在數(shù)組中的位置和數(shù)組中最大值和最小值的差值,計算出目標值的近似位置,再進行類似二分查找的...
在關(guān)鍵字中二分查找關(guān)鍵字45,89,12分別需要比較多少
1、查找時先取中間位置的記錄關(guān)鍵字與所給關(guān)鍵字比較 ,若所給關(guān)鍵字小于記錄關(guān)鍵字就在記錄關(guān)鍵字的前半部繼續(xù)進行二分查找,反之,在后半部查找!2、中間數(shù)的取法是(1+n)\/2 n為總共有多少個數(shù) 3、此題先找出記錄關(guān)鍵字為50 ,90大于它,在它的后半部在查找 4、第2次的記錄關(guān)鍵字為90 ,90...
二分算法(超詳細)
學(xué)會二分查找,二分答案與浮點二分,掌握這些高效算法,讓你編程之路事半功倍!如何在有序數(shù)組 arr 中高效地查找數(shù)字 key=4 的位置?通常方法是線性查找,復(fù)雜度為 O(n)。但二分查找能實現(xiàn)時間復(fù)雜度為 O(logn) 的高效搜索。二分查找算法步驟如下:令 L=1, R=8, mid=(L+R)\/2=4比較 arr...
二分查找.旋轉(zhuǎn)數(shù)組.搜索旋轉(zhuǎn)排序數(shù)組
若數(shù)組長度大于1,采用二分查找策略。初始化左右指針,循環(huán)直到左指針不小于右指針:若中間值位于有序段,即中間值小于等于首元素,查找范圍更新為中間值到數(shù)組末尾。反之,中間值位于無序段,即中間值大于首元素,查找范圍更新為數(shù)組首至中間值。當(dāng)查找范圍縮小至單一元素時,判斷該元素是否為目標值,是...
折半查找法二分查找算法詳細圖解
4.樣例 34. 在排序數(shù)組中查找元素的第一個和最后一個位置 33. 搜索旋轉(zhuǎn)排序數(shù)組 劍指 Offer 53 - II. 0~n-1中缺失的數(shù)字 仔細體會上面3個樣例。1.解決了上面說到的不能返回左右邊界的問題;2.這個問題是不完全有序數(shù)組的二分查找;基本思路就是將其往排序數(shù)組上趕,比較mid和left來確定是前...
設(shè)順序存儲的某線性表共有123個元素,按分塊查找的要求等分為3塊。
對于B塊,原理一樣,但是找到B塊本身需要比找到A塊多一步,因為是順序查找 因此
相關(guān)評說:
海淀區(qū)正向: ______ 二分查找又叫折半查找,但是有一個前提條件,就是你要查找的數(shù)據(jù)必須是按順序儲存,以關(guān)鍵字大小來排列的.例如 如果是整形數(shù)組,存放0~9這10個數(shù),數(shù)組必須按0到9(升序)或者9到0(降序)挨個儲存.如果你數(shù)組的元素之字符串,...
海淀區(qū)正向: ______[答案] 比較次數(shù) 3 2 3 4 1 3 4 2 3 4 就是用書上的二分算法,來算的. 你試試,根我的正確答案核對一下
海淀區(qū)正向: ______ 原理同上 實例:10 5 15 6 88 555 20 排序后的數(shù)5 6 10 15 20 88 555 查找10的步驟:選中間數(shù) 15 比較15和10后知道在15的左邊 再從5 6 10中選中間數(shù)6(15在上一輪比較中比過了,故把靠近15左邊的第一個作為最后一個元素) 比較6和10后知道在6的右邊 由此得出10的位置
海淀區(qū)正向: ______ #include<stdio.h> int main() { int a[11]={0,1,2,3,4,5,6,7,8,9,10},k=1,flag=0; int i,m,n,j,low,mid,high; for(i=1;i<=10;i++) { printf("a[%d]=%d ",i,a[i]); if(i%3==0)printf("\n"); } printf("\n\n輸入一個數(shù),輸出查找結(jié)果:"); scanf("%d",&m); printf("\...
海淀區(qū)正向: ______ public class BinarySearch { /** * 二分查找 * 簡介: 在二分搜尋法中,從數(shù)列的中間開始搜尋,如果這個數(shù)小于我們所搜尋的數(shù),由于數(shù)列已排序,則該數(shù)左邊的數(shù)一定都小于要搜尋的對象, * 所以無需浪費時間在左邊的數(shù);如果搜尋的數(shù)大于...
海淀區(qū)正向: ______ package com.teana.util; /** * 名稱: * * 描述: * * Copyright: Copyright 2010 * 創(chuàng)建日期 2010-01-17* 作者 teana * E-mail mmz06@163.com * 版本 1.0 */ public class BinarySearch { //無參構(gòu)造函數(shù) public BinarySearch() { super(); } /** * Java二分...
海淀區(qū)正向: ______ 原理我懂,實際應(yīng)用做不來! 從100中任意查找一個值,使用二分法最慢7步. 以前好象有這樣的游戲,隨機給你一個100以內(nèi)的數(shù),猜中該數(shù)會受到懲罰. 回答50,得到3種答案,等于、大于、小于 回答25或75,得到3種答案,等于、大于、小于 ...... 2的7次方等于128,所以100以內(nèi)的數(shù)據(jù)用二分法最慢只要7次.
海淀區(qū)正向: ______ 你可以由這個排好序的序列生成二叉樹,查找成功時的查找長度為查找路徑數(shù)+1;生成的二叉樹如下:查找13,查找長度3;查找18,查找長度4;查找24,查找長度2;依次類推,自己算了,理解好題目 采納,謝謝!
海淀區(qū)正向: ______ #include <stdio.h> int binfind(int val[] , int num , int value) { int start = 0; int end = num - 1; int mid = (start + end)/2; while(val[mid] != value && start < end) {7a686964616fe4b893e5b19e31333330333062if (val[mid] > value) { end = mid - 1; } else if (val[...
海淀區(qū)正向: ______ 算法思想. ①搜素過程從數(shù)組的中間元素開始,如果中間元素正好是要查找的元素,則搜素過程結(jié)束; ②如果某一特定元素大于或者小于中間元素,則在數(shù)組大于或小于中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較. ③如果在某一步驟數(shù)組為空,則代表找不到. 這種搜索算法每一次比較都使搜索范圍縮小一半.