




已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
java的System.currentTimeMillis()和System.nanoTime()有什么區(qū)別JDK1.5之后java中的計時給出了更精確的方法:System.nanoTime(),輸出的精度是納秒級別,這個給一些性能測試提供了更準確的參考。但是這個方法有個需要注意的地方,不能用來計算今天是哪一天看到這個方法不由得會想起System.currentTime(),這個方法,它的精度是毫秒,返回值是從1970.1.1的零點開始到當前時間的毫秒數(shù),理論上這個可以用來算當前的時間,而且可以用這個值來構(gòu)造一個Date對象。但是System.nanoTime()卻是不同,代碼注釋上有這么一句: The value returned represents nanoseconds since some fixed but arbitrary time (perhaps in the future, so values may be negative).這個返回值是一個從確定的值算起的,但是這個值是任意的,可能是一個未來的時間,所以返回值有可能是負數(shù)。(我的英語很蹩腳,意思應該能明白吧)所以說這個System.nanoTime()方法只能用來計時,例如:long s = System.nanoTime();.System.out.println(System.nanoTime() - s);二分查找算法java實現(xiàn)今天看了一下JDK里面的二分法是實現(xiàn),覺得有點小問題。二分法的實現(xiàn)有多種今天就給大家分享兩種。一種是遞歸方式的,一種是非遞歸方式的。先來看看一些基礎(chǔ)的東西。1、算法概念。二分查找算法也稱為折半搜索、二分搜索,是一種在有序數(shù)組中查找某一特定元素的搜索算法。請注意這種算法是建立在有序數(shù)組基礎(chǔ)上的。2、算法思想。搜素過程從數(shù)組的中間元素開始,如果中間元素正好是要查找的元素,則搜素過程結(jié)束;如果某一特定元素大于或者小于中間元素,則在數(shù)組大于或小于中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較。如果在某一步驟數(shù)組為空,則代表找不到。這種搜索算法每一次比較都使搜索范圍縮小一半。3、實現(xiàn)思路。找出位于數(shù)組中間的值,并存放在一個變量中(為了下面的說明,變量暫時命名為temp);需要找到的key和temp進行比較;如果key值大于temp,則把數(shù)組中間位置作為下一次計算的起點;重復 。如果key值小于temp,則把數(shù)組中間位置作為下一次計算的終點;重復 。如果key值等于temp,則返回數(shù)組下標,完成查找。4、實現(xiàn)代碼。/* * description : 二分查找。 * autor kwzhang * modify :2012-6-29 * * param * param array 需要查找的有序數(shù)組 * param from 起始下標 * param to 終止下標 * param key 需要查找的關(guān)鍵字 * return * throws Exception */ public static E extends Comparable 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 1) + (to 1); / 右移即除2 E temp = arraymiddle; if (pareTo(key) 0) to = middle - 1; else if (pareTo(key) 0) from = middle + 1; else return middle; return binarySearch(array, from, to, key); 5、測試demo很簡單,這里就不寫了。上面這種實現(xiàn)是通過遞歸的方式,各人覺得之類的問題用遞歸比較好理解,而且過程簡單。下面再來看看非遞歸的方式如何實現(xiàn)。在JDK里面正好有實現(xiàn),在此就直接貼上Arrays里面的代碼。為了簡單起見,我們就只看看int參數(shù)的方法: private static int binarySearch0(int a, int fromIndex, int toIndex, int key) int low = fromIndex; int high = toIndex - 1; while (low 1; int midVal = amid; if (midVal key) high = mid - 1; else return mid; / key found return -(low + 1); / key not found. 怎樣用下面的代碼實現(xiàn)下面(1)和(2)。求大家?guī)臀已a充完整。(1)在程序中為數(shù)組賦值并寫入待搜索元素,輸出搜索結(jié)果;(2)通過鍵盤為數(shù)組賦值并輸入待搜索元素,輸出搜索結(jié)果;public static int binarySearch(int a, int x, int n)int left = 0; int right = n - 1;while (left amiddle) left = middle + 1;else right = middle - 1;return -1; /由小到大排序 public static int sort(int a) for(int i=0;ia.length;i+) for(int j=0;jaj+1) int temp = aj; aj = aj+1; aj+1 = temp; return a; /回答第一題 public static int search1() /程序定義的數(shù)組 int b = 2,1,4,8,6,7,0; for(int a:b) System.out.println(a); /排序 b = sort(b); for(int a:b) System.out.println(a); return binarySearch(b,7,b.length); /回答第二題 public static int search2() Scanner sc = new Scanner(System.in); /輸入數(shù)組個數(shù) System.out.println(請輸入數(shù)組元素的個數(shù):); int idex = sc.nextInt(); /生成數(shù)組 int b = new intidex; /輸入元素 System.out.println(請輸入元素:); for(int i=0;ib.length;i+) bi = sc.nextInt(); for(int a:b) System.out.println(a); /排序 b = sort(b); for(int a:b) System.out.println(a); /輸入要查詢的元素 System.out.println(請輸入要查詢的元素:); int element = sc.nextInt(); return binarySearch(b,element,b.length); 任何項目開發(fā)中,在一個集合或數(shù)組中循環(huán)查找,搜索目標數(shù)據(jù),是經(jīng)常用到的。如果搜索的數(shù)據(jù)范圍比較小,那么不管什么算法,對于今天的計算機來說,性能上基本差別不大,但是如果數(shù)據(jù)量達到幾百萬,甚至更大,那么算法的選擇和優(yōu)化就顯得比較重要。有空之余測試了下順序搜索和二分搜索的性能,竟然發(fā)現(xiàn)效率差異在1500倍左右。當然,這2種比較的前提是,集合中的數(shù)據(jù)已經(jīng)進行了排序處理。下邊是測試代碼:/* * 搜索算法測試,主要是比較二分搜索和順序搜索的效率 * author 百里樂 */public class SearchTest /* 被搜索數(shù)據(jù)的大小*/ private static final int size = 5000000;/* * 啟動方法 * param args */ public static void main(String args) long data = new longsize; /添加測試數(shù)據(jù) for(int k =0 ;kdata.length;k+) datak = k; / 要查找的數(shù)據(jù) long target = 4980002; binaryFindTest(data,target); orderFindTest(data,target); /* * 二分搜索測試 * param data 數(shù)據(jù)集合 * param target 搜索的數(shù)據(jù) */ public static void binaryFindTest(long data, long target) long start = System.nanoTime(); int result = binaryFind(data,target); long end = System.nanoTime(); System.out.println(binary search position: + result); System.out.println(binary search time: + (end-start); /* * 順序搜索測試 * param data 數(shù)據(jù)集合 * param target 搜索的數(shù)據(jù) */ public static void orderFindTest(long data, long target) long start = System.nanoTime(); int result = orderFind(data,target); long end = System.nanoTime(); System.out.println(order search position: + result); System.out.println(order search time: + (end-start); /* * 二分搜索算法實現(xiàn) * param data 數(shù)據(jù)集合 * param target 搜索的數(shù)據(jù) * return 返回找到的數(shù)據(jù)的位置,返回-1表示沒有找到。 */ public static int binaryFind(long data, long target) int start = 0; int end = data.length - 1; while (start = datamiddleIndex) start = middleIndex + 1; else end = middleIndex - 1; return -1; /* * 順序搜索算法實現(xiàn) * param data 數(shù)據(jù)集合 * param target 搜索的數(shù)據(jù) * return 返回找到的數(shù)據(jù)的位置,返回-1表示沒有找到。 */ p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 項目風險與機會的分析與管理試題及答案
- 基礎(chǔ)會計試卷及答案
- 經(jīng)濟法概論應試能力提升試題及答案
- 商業(yè)項目代理銷售合作協(xié)議
- 水利水電工程風險管理技術(shù)試題及答案
- 小學生命教育主題班會
- 網(wǎng)絡公司網(wǎng)絡安全防范及處置方案
- 生物技術(shù)制藥研究試題集
- 電氣工程電纜布線知識題集
- 金融產(chǎn)品設計與管理指南
- 2013循證醫(yī)學-第六章臨床實踐指南的循證評價與應用
- 第一節(jié)-物欲型犯罪心理
- 國開(四川)2024年秋《演講與口才》形考任務1-2答案終結(jié)性考核答案
- 中國革命戰(zhàn)爭的戰(zhàn)略問題(全文)
- 《10000以內(nèi)數(shù)的讀、寫法》(教案)-二年級下冊數(shù)學人教版
- 秘書公文寫作范文
- 旅游經(jīng)濟專業(yè)知識和實務經(jīng)濟師考試(中級)試卷及解答參考(2025年)
- 方山縣赤堅嶺至劉家坡村段、橫泉水庫至東坡村段防洪能力提升工程環(huán)評報告書
- 一次性筷子購銷合同
- AQ/T 1119-2023 煤礦井下人員定位系統(tǒng)通 用技術(shù)條件(正式版)
- 家庭護理服務勞務合同范本
評論
0/150
提交評論