摘要:二分查找法要查找的數(shù)數(shù)組長(zhǎng)度設(shè)定的數(shù)組花了多少次找到最小值最大值當(dāng)前猜的值打印猜的每個(gè)數(shù)找到了花了次如果猜的數(shù)大于選定的數(shù),則把設(shè)為猜的數(shù),否則把設(shè)為猜的數(shù)請(qǐng)輸入大于等于的正整數(shù)且查找的數(shù)不能大于數(shù)組里最大的數(shù)調(diào)用方法執(zhí)行結(jié)果找到了花了次
大O表示法使用大寫字母O,可以認(rèn)為其含義為"order of"(大約是)。我們可以使用大O法來描述線性查找使用了O(N)級(jí)時(shí)間,二分查找使用了O(log N)級(jí)時(shí)間,向一個(gè)無序數(shù)組中插入使用了O(1),或常數(shù)級(jí)時(shí)間。
下面的圖總結(jié)了算法的運(yùn)行時(shí)間:
通過圖我們可以比較不同的大O值,O(1)是優(yōu)秀,O(logN)是良好,O(N)是還可以,O(N^2)則很差了,比如冒泡排序。
下面我們通過例子來看一下二分查找法。就是我們玩過的游戲猜數(shù)字,設(shè)定一個(gè)數(shù)組大小,一個(gè)人心里想一個(gè)數(shù),讓另外一個(gè)人來猜。每次告訴他猜大了還是小了,直到猜中為止。看花了多少步。
/** * 二分查找法 * @param search 要查找的數(shù) * @param total 數(shù)組長(zhǎng)度 */ public void compute(int search,int total){ //設(shè)定的數(shù)組 int[] num; if(total > 0 && search <= total && search >= 0){ num = new int[total]; for (int i = 0 ; i < total; i++){ num[i] = i; } //花了多少次找到 int sum = 0; //最小值 int min = 0 ; //最大值 int max = total; //當(dāng)前猜的值 int current; while (true){ sum ++ ; current = (min + max) / 2; //打印猜的每個(gè)數(shù) System.out.println(current); if(num[current] == search){ System.out.println("找到了,花了" + sum + "次"); return; }else{ //如果猜的數(shù)大于選定的數(shù),則把max設(shè)為猜的數(shù),否則把min設(shè)為猜的數(shù) if(num[current] > search){ max = num[current] ; }else{ min = num[current]; } } } }else { System.out.println("請(qǐng)輸入大于等于0的正整數(shù)且查找的數(shù)不能大于數(shù)組里最大的數(shù)"); } }
調(diào)用方法:
compute(3,100)
執(zhí)行結(jié)果:
50
25
12
6
3
找到了,花了5次
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/73301.html
摘要:外層循環(huán)讓內(nèi)層循環(huán)繼續(xù)排沒有排序過的數(shù)組,排序過的不用再排。那么優(yōu)化后的算法能快多少呢。我們都以數(shù)組長(zhǎng)度為來計(jì)算傳統(tǒng)冒泡排序步,優(yōu)化后的冒泡排序步。因?yàn)閮?yōu)化后的冒泡排序,每排完一次,最后一個(gè)數(shù)已經(jīng)是最大的,就不需要再比較了。 冒泡排序的時(shí)間用大O表示法是O(N^2). 傳統(tǒng)的冒泡排序: /** * @param total 要排序的數(shù)組長(zhǎng)度 */ public void sort(in...
摘要:當(dāng)東西發(fā)售時(shí),就會(huì)打你的電話通知你,讓你來領(lǐng)取完成更新。其中涉及的幾個(gè)步驟,按上面的例子來轉(zhuǎn)化一下你買東西,就是你要使用數(shù)據(jù)你把電話給老板,電話就是你的,用于通知老板記下電話在電話本,就是把保存在中。剩下的步驟屬于依賴更新 寫文章不容易,點(diǎn)個(gè)贊唄兄弟專注 Vue 源碼分享,文章分為白話版和 源碼版,白話版助于理解工作原理,源碼版助于了解內(nèi)部詳情,讓我們一起學(xué)習(xí)吧研究基于 Vue版本 【...
摘要:我們都知道分為普通和作用域,兩個(gè)內(nèi)容都很多,所以分兩部分進(jìn)行講述。今天講的是普通其實(shí)普通,表示默認(rèn)和具名,只是他們的處理方式都差不多,就只是是否有自定義名字而已,所以,表示一種類型。 寫文章不容易,點(diǎn)個(gè)贊唄兄弟專注 Vue 源碼分享,文章分為白話版和 源碼版,白話版助于理解工作原理,源碼版助于了解內(nèi)部詳情,讓我們一起學(xué)習(xí)吧研究基于 Vue版本 【2.5.17】 如果你覺得排版難看,請(qǐng)...
摘要:縮放加載加載大圖片使用大圖片時(shí)可能出現(xiàn)的異常在下采用來表示顏色每個(gè)像素占圖片手機(jī)寬縮放高縮放需要考慮的問題動(dòng)態(tài)獲取圖片的分辨率動(dòng)態(tài)獲取手機(jī)分辨率實(shí)現(xiàn)步驟獲取手機(jī)屏幕的寬和高獲取圖片的寬和高創(chuàng)建的配置參數(shù)設(shè)置的值為此時(shí)方法并不會(huì)去真正 縮放加載加載大圖片(使用大圖片時(shí)可能出現(xiàn)的異常) 09-14 00:59:51.813: E/AndroidRuntime(2128): Caused b...
摘要:通過函數(shù)參數(shù)傳遞的形式,讓插槽的變量,在解析時(shí),先訪問函數(shù)變量。那么這兩個(gè)有什么關(guān)系呢外殼節(jié)點(diǎn)保存著所有父組件里給這個(gè)子組件綁定的數(shù)據(jù),比如,插槽等。 寫文章不容易,點(diǎn)個(gè)贊唄兄弟專注 Vue 源碼分享,文章分為白話版和 源碼版,白話版助于理解工作原理,源碼版助于了解內(nèi)部詳情,讓我們一起學(xué)習(xí)吧研究基于 Vue版本 【2.5.17】 如果你覺得排版難看,請(qǐng)點(diǎn)擊 下面鏈接 或者 拉到 下面...
閱讀 3753·2021-10-13 09:39
閱讀 3804·2021-09-24 09:48
閱讀 1203·2021-09-01 10:30
閱讀 2533·2019-08-30 15:55
閱讀 1786·2019-08-29 16:39
閱讀 2304·2019-08-26 13:55
閱讀 3057·2019-08-26 12:23
閱讀 1643·2019-08-26 11:59