算法图解——の——二分查找【附带pdf下载链接】
生活随笔
收集整理的這篇文章主要介紹了
算法图解——の——二分查找【附带pdf下载链接】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、二分查找要求輸入集合有序,所以好多算法會涉及到排序
2、二分查找效率高,用二分查找最多需要log 2 n步,而簡單查找最多需要n步
舉例說下,例如1.2.3......1024,二分查找最多需要log2 1024即10次,而普通查找最多需要1024次,發現有100倍的差距,數量越大,越明顯
鏈接:https://pan.baidu.com/s/1V4rsYsFvwS745E05Cj5ZEQ?
提取碼:x7y4?
復制這段內容后打開百度網盤手機App,操作更方便哦--來自百度網盤超級會員V5的分享
下面列出二分查找的java代碼供參考,兩個 不同的區別是,如果輸入集合只有一個時,的代碼拆分與整合。
/*** Created by burns.** @author <a href="http://www.esoon-soft.com/">burns</a>* @date 2021/03/21 8:58*/import java.util.ArrayList; import java.util.List;/*** 二分查找** @ClassName BinarySearch* @Author Burns* @DAte 2021/3/21 8:58*/ public class BinarySearch {public static void main(String[] args){{//第一種情況,傳入的list為空System.out.println("第一種情況------start-------");List<Integer> list1 = null;int index = binarySearch(list1,0);outputInfo(index);System.out.println("第一種情況------end-------");}{//第二種情況,傳遞的list只有一個值System.out.println("第二種情況------start-------");List<Integer> list2 = new ArrayList<Integer>();list2.add(1);int index = binarySearch(list2,1);outputInfo(index);System.out.println("第二種情況------end-------");}{//第三種情況,傳遞的list有多個值System.out.println("第三種情況------start-------");List<Integer> list3 = new ArrayList<Integer>();list3.add(1);list3.add(2);list3.add(3);list3.add(4);list3.add(5);int index = binarySearch(list3,3);outputInfo(index);System.out.println("第三種情況------end-------");}// 其中 第二和第三種情況可以合并在一起,區別是 while (low<high)改成 while (low<=high){}private static void outputInfo(int index) {if(index==-1){System.out.println("沒找到");}else {System.out.println("找到了,序列是"+index);}}/*** 三種情況分開** @Description:* @Param: [list, n]* @Return: int* @Author: Burns* @Date: 2021/3/21*/private static int binarySearch(List<Integer> list,int n){if(list == null || list.size()==0){System.out.println("輸入集合為空!");return -1;}else {if(list.size()==1){if(n==list.get(0)){return 0;}else {System.out.println("沒找到!");return -1;}}else {//定義開頭和結尾部分要查找的位置序號,list的第一個值是從0開始的,所以high就是list的數量-1int low = 0;int high = list.size()-1;//如果low小于等于high,說明值還沒有找到,需要繼續找,否則while (low<high){int mid = (low+high)/2;//猜測值為中間的值int guess = list.get(mid);//如果猜測值和中間值相等,則返回if(guess==n){return mid;}//如果猜測值比查找值大if(guess>n){high = mid-1;}else {low = mid+1;}}return -1;}}}}?
?
?
/*** Created by burns.** @author <a href="http://www.esoon-soft.com/">burns</a>* @date 2021/03/21 8:58*/import java.util.ArrayList; import java.util.List;/*** 二分查找** @ClassName BinarySearch* @Author Burns* @DAte 2021/3/21 8:58*/ public class BinarySearch1 {public static void main(String[] args) {{//第一種情況,傳入的list為空System.out.println("第一種情況------start-------");List<Integer> list1 = null;int index = binarySearch(list1, 0);outputInfo(index);System.out.println("第一種情況------end-------");}{//第二種情況,傳遞的list只有一個值System.out.println("第二種情況------start-------");List<Integer> list2 = new ArrayList<Integer>();list2.add(1);int index = binarySearch(list2, 1);outputInfo(index);System.out.println("第二種情況------end-------");}{//第三種情況,傳遞的list有多個值System.out.println("第三種情況------start-------");List<Integer> list3 = new ArrayList<Integer>();list3.add(1);list3.add(2);list3.add(3);list3.add(4);list3.add(5);int index = binarySearch(list3, 3);outputInfo(index);System.out.println("第三種情況------end-------");}// 其中 第二和第三種情況可以合并在一起,區別是 while (low<high)改成 while (low<=high){}private static void outputInfo(int index) {if (index == -1) {System.out.println("沒找到");} else {System.out.println("找到了,序列是" + index);}}/*** 三種情況分開** @Description:* @Param: [list, n]* @Return: int* @Author: Burns* @Date: 2021/3/21*/private static int binarySearch(List<Integer> list, int n) {if (list == null || list.size() == 0) {System.out.println("輸入集合為空!");return -1;} else {//定義開頭和結尾部分要查找的位置序號,list的第一個值是從0開始的,所以high就是list的數量-1int low = 0;int high = list.size() - 1;//如果low小于等于high,說明值還沒有找到,需要繼續找,否則while (low <= high) {int mid = (low + high) / 2;//猜測值為中間的值int guess = list.get(mid);//如果猜測值和中間值相等,則返回if (guess == n) {return mid;}//如果猜測值比查找值大if (guess > n) {high = mid - 1;} else {low = mid + 1;}}return -1;}}}?
總結
以上是生活随笔為你收集整理的算法图解——の——二分查找【附带pdf下载链接】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: atitit. 分销系统规划p8k
- 下一篇: Linux编程MQTT实现主题发布订阅