自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java編程內(nèi)功-數(shù)據(jù)結(jié)構(gòu)與算法「二分查找」

開發(fā) 后端 算法
本篇給大家介紹Java編程數(shù)據(jù)結(jié)構(gòu)與算法中二分查找的相關(guān)內(nèi)容,希望能夠幫助到你!

[[395207]]

需求

對于一個有序的數(shù)組進行二分查找{1,8,10,89,1000,1234},輸入一個數(shù)看看該數(shù)組是否存在此數(shù),并求出下標,如果沒有就提示”沒有這個數(shù)據(jù)”。

思路分析

  1. 首先確定該數(shù)組中間的下標 mid=(left+right)/2.
  2. 然后讓需要查找的數(shù)findValue和arr[mid]比較,findValue > arr[mid],說明要查找的數(shù)在arr[mid]的右邊,因此向右遞歸.findValue < arr[mid],說明要查找的數(shù)在arr[mid]的左邊,因此向左遞歸.findValue == arr[mid],說明找打,就返回。
  3. 退出遞歸的條件找到就結(jié)束遞歸。遞歸完整個數(shù)組仍然沒有找到findValue,需要結(jié)束遞歸,即當 left > right

代碼案例

  1. package com.xie.search; 
  2.  
  3. import java.util.ArrayList; 
  4. import java.util.Arrays; 
  5. import java.util.List; 
  6.  
  7. public class BinarySearch { 
  8.     static int count = 0; 
  9.  
  10.     public static void main(String[] args) { 
  11.         int[] arr = new int[102]; 
  12.         arr[0] = 1; 
  13.         arr[1] = 1; 
  14.         for (int i = 2; i < 102; i++) { 
  15.             arr[i] = i; 
  16.         } 
  17.         List<Integer> indexList = binarySearch(arr, 0, arr.length - 1, 1); 
  18.         System.out.println("indexList = " + indexList); 
  19.         System.out.println("查找次數(shù):" + count); 
  20.         /* 
  21.         indexList = [1, 0] 
  22.         查找次數(shù):6 
  23.          */ 
  24.     } 
  25.  
  26.     /** 
  27.      * 二分查找,查找符合值得所有索引集合 
  28.      * 
  29.      * @param arr       數(shù)組 
  30.      * @param left      左邊索引 
  31.      * @param right     右邊索引 
  32.      * @param findValue 查找的值 
  33.      * @return 找到就返回所有索引的集合,沒有就返回空 
  34.      */ 
  35.     public static List<Integer> binarySearch(int[] arr, int leftint rightint findValue) { 
  36.         count++; 
  37.         List<Integer> indexList = new ArrayList<Integer>(); 
  38.         //當left > right時,說明遞歸完畢 
  39.         if (left > right) { 
  40.             return new ArrayList<Integer>(); 
  41.         } 
  42.         int mid = (left + right) / 2; 
  43.         int midVal = arr[mid]; 
  44.         if (findValue > midVal) { 
  45.             //查找的值比中間值大,向右遞歸 
  46.             return binarySearch(arr, mid + 1, right, findValue); 
  47.         } else if (findValue < midVal) { 
  48.             //查找的值比中間值小,向左遞歸 
  49.             return binarySearch(arr, left, mid - 1, findValue); 
  50.         } else { 
  51.             //如果找到了,再向左掃描,將滿足條件的加入indexList 
  52.             int temp = mid - 1; 
  53.             while (true) { 
  54.                 if (temp < 0 || arr[temp] != findValue) { 
  55.                     break; 
  56.                 } 
  57.                 indexList.add(temp); 
  58.                 temp--; 
  59.             } 
  60.  
  61.             //再向右掃描,將滿足條件的加入indexList 
  62.             temp = mid + 1; 
  63.             while (true) { 
  64.                 if (temp > right || arr[temp] != findValue) { 
  65.                     break; 
  66.                 } 
  67.                 indexList.add(temp); 
  68.                 temp++; 
  69.             } 
  70.             indexList.add(mid); 
  71.             return indexList; 
  72.         } 
  73.     } 

 【編輯推薦】

 

責任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2021-04-27 06:21:29

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-04-07 09:26:37

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-05-12 09:07:09

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-04-13 09:37:41

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-03-09 06:30:32

JAVA數(shù)據(jù)結(jié)構(gòu)算法

2021-03-18 08:44:20

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-05-08 08:28:38

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-03-23 08:33:22

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-03-12 09:13:47

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-03-26 08:40:28

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-03-10 08:42:19

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-03-17 09:27:36

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-03-08 06:28:57

JAVA數(shù)據(jù)結(jié)構(gòu)與算法稀疏數(shù)組

2021-04-15 09:36:44

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-04-16 09:40:52

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-04-22 10:07:45

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-03-14 08:27:40

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-04-01 10:34:18

Java編程數(shù)據(jù)結(jié)構(gòu)算法

2021-03-29 10:13:47

Java編程數(shù)據(jù)結(jié)構(gòu)算法

2021-03-19 10:25:12

Java數(shù)據(jù)結(jié)構(gòu)算法
點贊
收藏

51CTO技術(shù)棧公眾號