强奸久久久久久久|草草浮力在线影院|手机成人无码av|亚洲精品狼友视频|国产国模精品一区|久久成人中文字幕|超碰在线视屏免费|玖玖欧洲一区二区|欧美精品无码一区|日韩无遮一区二区

首頁 > 資訊 > 問答 > 二分法查找,二分法查找的原理是什么

二分法查找,二分法查找的原理是什么

來源:整理 時間:2025-01-24 17:35:04 編輯:智能門戶 手機版

本文目錄一覽

1,二分法查找的原理是什么

lbN,以2為底的對數(shù),取上限,最多4次。原理是折半查找,每次把表分成兩半,因為已經(jīng)排序的,所以只需要和中間數(shù)比較就能確定是在哪一半,然后不斷分成兩半,直到匹配,或者沒有數(shù)字,表示查找失敗。次數(shù)最多就是上面提到的。

二分法查找的原理是什么

2,二分法查找

二分法查找又稱折半查字法;思路是.恩!舉例吧0,1,2,3,4,5,6,7,8中找5取數(shù)組中的一半也就是地五個4與5比較,如果4>5(就是中間的那個數(shù)比要找的那個大,那么就取那個數(shù)之前的那部分);如果4<5(就是中間的那個數(shù)比要找的那個小,就取那個數(shù)只后的那部分);如此循環(huán)下去;不好意思,語文沒學(xué)好,表達(dá)不清楚
如果我沒記錯的話,二分查找的性能應(yīng)該與二叉樹類似~所以8個數(shù)(畫出二叉圖來)一共有1+2*2+3*4+4*1=21

二分法查找

3,二分法查找的介紹

算法:當(dāng)數(shù)據(jù)量很大適宜采用該方法。采用二分法查找時,數(shù)據(jù)需是排好序的。主要思想是:(設(shè)查找的數(shù)組區(qū)間為array[low, high])(1)確定該期間的中間位置K(2)將查找的值T與array[k]比較。若相等,查找成功返回此位置;否則確定新的查找區(qū)域,繼續(xù)二分查找。區(qū)域確定如下:a.array[k]>T 由數(shù)組的有序性可知array[k,k+1,……,high]>T;故新的區(qū)間為array[low,……,K-1]b.array[k]<T 類似上面查找區(qū)間為array[k+1,……,high]。每一次查找與中間值比較,可以確定是否查找成功,不成功當(dāng)前查找區(qū)間縮小一半。遞歸找,即可,時間復(fù)雜度:O(log2n)。

二分法查找的介紹

4,excel中l(wèi)ookup關(guān)于二分法

二分法查找算法:當(dāng)數(shù)據(jù)量很大適宜采用該方法。采用二分法查找時,數(shù)據(jù)需是排好序的。 基本思想:假設(shè)數(shù)據(jù)是按升序排序的,對于給定值x,從序列的中間位置開始比較,如果當(dāng)前位置值等于x,則查找成功;若x小于當(dāng)前位置值,則在數(shù)列的前半段中查找;若x大于當(dāng)前位置值則在數(shù)列的后半段中繼續(xù)查找,直到找到為止。本例中2,8,4,5,6未排序,因此給出了末位的6;如果寫成=LOOKUP(9,{2,4,5,6,8}),結(jié)果是8。
lookup認(rèn)為數(shù)組中的值是以升序順序放置的,在二分法下,它先中4開始查找(二分就是分成二部分,4在數(shù)組的中間,)當(dāng)發(fā)現(xiàn)4<>9時,查找下一個5(因為是升序排序,所以它認(rèn)為下一個數(shù)字比4大),5<>9時,查找6,當(dāng)發(fā)現(xiàn)6<>9時且下面沒數(shù)據(jù)可查找了。于是笨電腦就返回了這個 6,你如果把6改成大于9的數(shù)字,它就會返回5

5,什么叫java中的二分查找法

算法思想?! 、偎阉剡^程從數(shù)組的中間元素開始,如果中間元素正好是要查找的元素,則搜素過程結(jié)束; ?、谌绻骋惶囟ㄔ卮笥诨蛘咝∮谥虚g元素,則在數(shù)組大于或小于中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較?! 、廴绻谀骋徊襟E數(shù)組為空,則代表找不到。  這種搜索算法每一次比較都使搜索范圍縮小一半。
1、算法概念?! 《植檎宜惴ㄒ卜Q為折半搜索、二分搜索,是一種在有序數(shù)組中查找某一特定元素的搜索算法。請注意這種算法是建立在有序數(shù)組基礎(chǔ)上的。  2、算法思想?! 、偎阉剡^程從數(shù)組的中間元素開始,如果中間元素正好是要查找的元素,則搜素過程結(jié)束; ?、谌绻骋惶囟ㄔ卮笥诨蛘咝∮谥虚g元素,則在數(shù)組大于或小于中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較?! 、廴绻谀骋徊襟E數(shù)組為空,則代表找不到?! ∵@種搜索算法每一次比較都使搜索范圍縮小一半?! ?、實現(xiàn)思路?! 、僬页鑫挥跀?shù)組中間的值,并存放在一個變量中(為了下面的說明,變量暫時命名為temp);  ②需要找到的key和temp進(jìn)行比較; ?、廴绻鹝ey值大于temp,則把數(shù)組中間位置作為下一次計算的起點;重復(fù)① ②?! 、苋绻鹝ey值小于temp,則把數(shù)組中間位置作為下一次計算的終點;重復(fù)① ② ③?! 、萑绻鹝ey值等于temp,則返回數(shù)組下標(biāo),完成查找?! ?、實現(xiàn)代碼。/** * description : 二分查找。 * @param array 需要查找的有序數(shù)組 * @param from 起始下標(biāo) * @param to 終止下標(biāo) * @param key 需要查找的關(guān)鍵字 * @return */ public static > int binarySearch(E[] array, int from, int to, E key) throws Exception { if (from < 0 || to < 0) { throw new IllegalArgumentException("params from & length must larger than 0 ."); } if (from <= to) { int middle = (from >>> 1) + (to >>> 1); // 右移即除2 E temp = array[middle]; if (temp.compareTo(key) > 0) { to = middle - 1; } else if (temp.compareTo(key) < 0) { from = middle + 1; } else { return middle; } } return binarySearch(array, from, to, key); }
對于排序過的目標(biāo)集合,然后每次都找中間的值,和目標(biāo)值比大小,如果相等則結(jié)束,不然就到相應(yīng)的半邊繼續(xù)這個步驟,直到找到目標(biāo)為止因為每次找的范圍都是上一次的一半,所以效率比直接查找快
string[] arr = arrays.sort(arr);//先排序(升序) system.out.println("排序后的結(jié)果:"+arrays.tostring(arr)); int index = arrays.binarysearch(arr, "java");//二分查找法"java" system.out.println(index);// 排序后的結(jié)果:[java, abd, hgd, java, red]// 0排序后,結(jié)果可能不是你想要的,可以數(shù)組直接轉(zhuǎn)換成字符串,再利用indexof方法查找java在字符串中的位置

6,C語言 二分法查找問題

#include<stdio.h>voidmain() floatx0,x1,x2,fx0,fx1,fx2; do printf("enterx1&x2:"); scanf("%f,%f",&x1,&x2); fx1=(x1*(2*x1-4)+3)*x1-6; fx2=(x2*(2*x2-4)+3)*x2-6; }while(fx1*fx2>0); /*如果f(x1),f(x2)同號,則在[x1,x2]區(qū)間無實根,重新輸入x1,x2*/ do x0=(x1+x2)/2; /*求x1和x2間的中點:x0=(x1+x2)/2 */ fx0=(x0*(2*x0-4)+3)*x0-6; if((fx0*fx1)<0) x2=x0; fx2=fx0; } else x1=x0;fx1=fx0; } }while(fabs(fx0)>=1e-5);/*判斷f(x0)的絕對值是否小于某一個指定的值(如10的負(fù)5次方)*/ printf("x=%6.3f\n",x0);/*輸出x0*/ }
12345678910111213141516171819202122 #include<stdio.h>intmain() inta[10]= intn=7; intlow=0,high=10; intmid=0; while(low<=high) mid=(low+high)/2; if(n<a[mid]) high=mid-1; elseif(n>a[mid]) low=mid+1; else printf("%d",mid); break; //找到了,跳出循環(huán)就可以了 } } return0;}
#include <stdio.h>void main() float x0,x1,x2,fx0,fx1,fx2; do printf("enter x1 & x2:"); scanf("%f,%f",&x1,&x2); fx1=(x1*(2*x1-4)+3)*x1-6; fx2=(x2*(2*x2-4)+3)*x2-6; }while(fx1*fx2>0); /*如果f(x1),f(x2)同號,則在[x1,x2]區(qū)間無實根,重新輸入x1,x2 */ do x0=(x1+x2)/2; /*求x1和x2間的中點:x0=(x1+x2)/2 */ fx0=(x0*(2*x0-4)+3)*x0-6; if((fx0*fx1)<0) x2=x0; fx2=fx0; } else x1=x0; fx1=fx0; } }while(fabs(fx0)>=1e-5);/*判斷f(x0)的絕對值是否小于某一個指定的值(如10的負(fù)5次方)*/ printf("x=%6.3f\n",x0); /*輸出x0*/ }
a.txt: 讀入數(shù)據(jù)b.txt: 寫入排序數(shù)據(jù)c.txt: 寫入查找結(jié)果#include <stdio.h>const int maxn = 1000;int num[maxn], n;void swap(int* x,int* y) { *x ^= *y; *y = *x^*y; *x = *x^*y;}void finput() { printf("--------\nread data from a.txt\n--------\n\n"); FILE* fin = fopen("a.txt","r"); n = 0; while ( fscanf(fin,"%d",&num[n]) != EOF ) { n++; } fclose(fin);}void bubble() { printf("--------\nstart bubbling sort algorithm\n"); for (int i = n-1; i > 0; --i) { for (int j = 0; j < i; ++j) { if (num[j] > num[j+1]) { swap(&num[j],&num[j+1]); } } } printf("write the result of sort in b.txt\n--------\n\n"); FILE* fout = fopen("b.txt","w"); for (int i = 0; i < n; ++i) { fprintf(fout,"%d\n", num[i]); } fclose(fout);}int rbesearch(int low,int high,int v) { // recursive binary search // return the index of v. if not exists, return -1. if (low == high) { if (num[low] == v) return low; return -1; } if (num[low] == v) return low; int mid = (low+high)/2; if (num[mid] < v) { return rbesearch(mid+1,high,v); } else { return rbesearch(low,mid,v); }}int nrbesearch(int low,int high,int v) { // non-recursive binary search // return the index of v. if not exists, return -1. while (low < high) { int mid = (low+high)/2; if (num[mid] < v) { low = mid+1; } else { high = mid; } } if (low == high && num[low] == v) { return low; } return -1;}void search() { printf("--------\n"); printf("Start search.\n"); printf("The results will be written in c.txt\n"); printf("please input a num. if num = -123456, quit.\n"); FILE* file=fopen("c.txt","w"); while (true) { int v; scanf("%d", &v); if (v == -123456) break; int rb = rbesearch(0,n-1,v); int nrb = nrbesearch(0,n-1,v); fprintf(file,"input: %d\n",v); fprintf(file,"the result of recursive binary search: %d\n", rb); fprintf(file,"the result of non-recursive binary search: %d\n\n", nrb); printf("the result of recursive binary search: %d\n", rb); printf("the result of non-recursive binary search: %d\n\n",nrb); } fclose(file); }int main() { finput(); bubble(); search(); return 0;}
文章TAG:二分法查找原理是什么二分法查找

最近更新

  • 無創(chuàng)血糖,無創(chuàng)血糖儀是不是測血糖不用扎針了無創(chuàng)血糖,無創(chuàng)血糖儀是不是測血糖不用扎針了

    無創(chuàng)血糖儀是不是測血糖不用扎針了2,無創(chuàng)血糖儀如何使用3,有誰買了糖友樂無創(chuàng)血糖檢測儀效果如何4,為什么有無創(chuàng)血氧儀卻沒有無創(chuàng)血糖儀5,便宜點的無創(chuàng)血糖儀6,有沒有人用過無創(chuàng)血糖儀1,無創(chuàng).....

    問答 日期:2025-01-24

  • 辰豐自動化設(shè)備,怡豐自動化設(shè)備有限公司辰豐自動化設(shè)備,怡豐自動化設(shè)備有限公司

    南通怎么樣辰豐-1設(shè)備制造有限公司南通辰豐自動化設(shè)備制造有限公司的經(jīng)營范圍是:自動化機械設(shè)備起重6789-2/,簾子線設(shè)備,環(huán)保設(shè)備,無紡布設(shè)備,石墨設(shè)備及配件,印染機械及配件,非標(biāo)機械,/110。.....

    問答 日期:2025-01-24

  • 榫卯自動化設(shè)備,榫卯結(jié)構(gòu)有自動化程度更高但是仍是文化榫卯自動化設(shè)備,榫卯結(jié)構(gòu)有自動化程度更高但是仍是文化

    榫卯結(jié)構(gòu),也有較高的自動化程度,進(jìn)給出來不動。但是榫卯是一種文化,我們可以在古代榫卯的基礎(chǔ)上做更多的繼承和創(chuàng)新,什么是榫卯結(jié)構(gòu)?另外,榫卯結(jié)構(gòu)也沒什么可夸的,很多榫眼和榫頭都有更現(xiàn)代化.....

    問答 日期:2025-01-24

  • 小胖羊,男人叫女人小綿羊是什么意思小胖羊,男人叫女人小綿羊是什么意思

    男人叫女人小綿羊是什么意思喜歡水瓶座的女人2,小肥羊相近的詞有哪些懶羊羊,和小肥羊一樣愛吃。你好!是小胖羊。僅代表個人觀點,不喜勿噴,謝謝。3,天天酷跑小胖羊超級組合天天酷跑是沒有小胖.....

    問答 日期:2025-01-24

  • 修一根數(shù)據(jù)線,一根原裝數(shù)據(jù)線能用多久修一根數(shù)據(jù)線,一根原裝數(shù)據(jù)線能用多久

    平板一根數(shù)據(jù)線還有一個樂譜,數(shù)據(jù)線壞了很難修,不如直接改成一根??梢酝ㄟ^形成保護(hù)膜來保護(hù)數(shù)據(jù)線路,數(shù)據(jù)如果線路壞了,很少有人去修,一般都是直接更換,數(shù)據(jù)如何修剪斷線?它可以再生,數(shù)據(jù)線,就.....

    問答 日期:2025-01-24

  • pixy,誰知道Pixy的中文含義pixy,誰知道Pixy的中文含義

    誰知道Pixy的中文含義2,那個pixy是不是一個很著名的動畫制作公司3,英文Pixy中文漢字是什么4,誰知道Pixy的中文含義5,含pxy的男生英語名字6,重大發(fā)現(xiàn)我終于明白PIXY為什么要變節(jié)了1,誰知道Pix.....

    問答 日期:2025-01-24

  • 自動化電氣原件符號圖標(biāo),電氣符號圖形大全電氣元件及符號?自動化電氣原件符號圖標(biāo),電氣符號圖形大全電氣元件及符號?

    電氣符號和圖形國家標(biāo)準(zhǔn)全集。國家標(biāo)準(zhǔn)《電氣符號圖形百科全書》中有上百種電氣符號,所有電氣元件和符號?電氣系統(tǒng)圖中常見的電氣元件符號有哪些?GB/T4728.22005電氣圖用圖形符號第2部分.....

    問答 日期:2025-01-24

  • aa是幾號電池,日常使用的電池上標(biāo)有AA的是幾號電池aa是幾號電池,日常使用的電池上標(biāo)有AA的是幾號電池

    日常使用的電池上標(biāo)有AA的是幾號電池2,干電池上的AAAAA是什么意思3,AA堿性電池是幾號電池電池是怎么分類的4,aa電池是幾號5,AA電池是什么意思6,電池AA代表啥意思1,日常使用的電池上標(biāo)有AA的.....

    問答 日期:2025-01-24