日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数组查找———二分(折半)查找法

發布時間:2024/10/8 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数组查找———二分(折半)查找法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

思路(PPT)

將要查找的元素和數組中間的元素比較,如果沒找到則繼續折半

代碼

int nums[] = {2, 5, 9, 1, 3};System.out.println(Arrays.toString(nums));//先排序,必要條件,不然無法左右兩邊數值Arrays.sort(nums);System.out.println(Arrays.toString(nums));//假設一個查找的數字int num = 9;//進行折半int zhongjian = (nums.length - 1) / 2;boolean pd = true;do {//開始比較,先和數組中間的值進行比較if (num > nums[zhongjian]) {//查找的數字大于中間數字,說明數字可能在右邊zhongjian++;} else if (num < nums[zhongjian]) {//查找的數字小于中間數字,說明數字可能在左邊zhongjian--;} else if (num == nums[zhongjian]) {System.out.println("找到了,下標為:" + zhongjian);break;}//判斷下標不能低于0也不能高于最大值if (zhongjian < 0) {pd = false;} else if (zhongjian > (nums.length - 1)) {pd = false;}} while (pd);if(!pd){System.out.println("沒有這個數字");}

效果

個人思路

? ? ? ? 1.先決條件先給數組排序

? ? ? ? 2.算出數組的中間下標值

? ? ? ? 3.因為不確定比較次數,所以使用do while 循環比較

? ? ? ? 4.如果需要查找的值等于數組下標對應的值,那么就直接輸出并結束循環,如果大于數組下標對應的值,就說明查找的數字大于中間數字,說明數字可能在右邊,如果小于數組下標對應的值,那么就說明查找的數字小于中間數字,說明數字可能在左邊,那么就依次對應像讓下標++向右邊靠攏或者--向左邊靠攏,while來判斷不斷循環變換的下標是否超過最低最高值,超過結束循環,提示沒有找到該數字

總結

????????這個查找下標的方法從中間向兩邊擴散,看似解決了程序的資源,但是有一個先決條件需要先排序才能進行對折查詢,而排序耗費的算里依然比我們只用一個for循環來查找下標要多,所以根據使用情況來使用對折查詢法(如前面必須要求排序一下的話用這個方法就不錯)。

總結

以上是生活随笔為你收集整理的数组查找———二分(折半)查找法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。