国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java 二分法算法的實例

java 二分法算法的實例

2020-12-24 13:32wely Java教程

這篇文章主要介紹了java 二分法算法的實例的相關資料,希望通過本文大家能夠掌握二分法,需要的朋友可以參考下

java 二分法算法的實例

1、前提:二分查找的前提是需要查找的數組必須是已排序的,我們這里的實現默認為升序

2、原理:將數組分為三部分,依次是中值(所謂的中值就是數組中間位置的那個值)前,中值,中值后;將要查找的值和數組的中值進行比較,若小于中值則在中值前面找,若大于中值則在中值后面找,等于中值時直接返回。然后依次是一個遞歸過程,將前半部分或者后半部分繼續分解為三部分。可能描述得不是很清楚,若是不理解可以去網上找。從描述上就可以看出這個算法適合用遞歸來實現,可以用遞歸的都可以用循環來實現。所以我們的實現分為遞歸和循環兩種,可以根據代碼來理解算法

3、實現

代碼如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package org.cyxl.algorithm.search;
 
/**
 * 二分查找
 * @author cyxl
 *
 */
public class BinarySearch {
  private int rCount=0;
  private int lCount=0;
   
  /**
   * 獲取遞歸的次數
   * @return
   */
  public int getrCount() {
    return rCount;
  }
 
  /**
   * 獲取循環的次數
   * @return
   */
  public int getlCount() {
    return lCount;
  }
 
  /**
   * 執行遞歸二分查找,返回第一次出現該值的位置
   * @param sortedData  已排序的數組
   * @param start     開始位置
   * @param end      結束位置
   * @param findValue   需要找的值
   * @return       值在數組中的位置,從0開始。找不到返回-1
   */
  public int searchRecursive(int[] sortedData,int start,int end,int findValue)
  {
    rCount++;
    if(start<=end)
    {
      //中間位置
      int middle=(start+end)>>1//相當于(start+end)/2
      //中值
      int middleValue=sortedData[middle];
       
      if(findValue==middleValue)
      {
        //等于中值直接返回
        return middle;
      }
      else if(findValue<middleValue)
      {
        //小于中值時在中值前面找
        return searchRecursive(sortedData,start,middle-1,findValue);
      }
      else
      {
        //大于中值在中值后面找
        return searchRecursive(sortedData,middle+1,end,findValue);
      }
    }
    else
    {
      //找不到
      return -1;
    }
  }
   
  /**
   * 循環二分查找,返回第一次出現該值的位置
   * @param sortedData  已排序的數組
   * @param findValue   需要找的值
   * @return       值在數組中的位置,從0開始。找不到返回-1
   */
  public int searchLoop(int[] sortedData,int findValue)
  {
    int start=0;
    int end=sortedData.length-1;
     
    while(start<=end)
    {
      lCount++;
      //中間位置
      int middle=(start+end)>>1//相當于(start+end)/2
      //中值
      int middleValue=sortedData[middle];
       
      if(findValue==middleValue)
      {
        //等于中值直接返回
        return middle;
      }
      else if(findValue<middleValue)
      {
        //小于中值時在中值前面找
        end=middle-1;
      }
      else
      {
        //大于中值在中值后面找
        start=middle+1;
      }
    }
    //找不到
    return -1;
  }
}

4、測試代碼 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package org.cyxl.algorithm.search.test;
 
import org.cyxl.algorithm.search.BinarySearch;
import org.junit.Test;
 
 
public class BinarySearchTest {
  @Test
  public void testSearch()
  {
    BinarySearch bs=new BinarySearch();
     
    int[] sortedData={1,2,3,4,5,6,6,7,8,8,9,10};
    int findValue=9;
    int length=sortedData.length;
     
    int pos=bs.searchRecursive(sortedData, 0, length-1, findValue);
    System.out.println("Recursice:"+findValue+" found in pos "+pos+";count:"+bs.getrCount());
    int pos2=bs.searchLoop(sortedData, findValue);
     
    System.out.println("Loop:"+findValue+" found in pos "+pos+";count:"+bs.getlCount());
  }
}

5、總結:這種查找方式的使用場合為已排序的數組。可以發現遞歸和循環的次數是一樣的

以上就是java 二分法的實例詳解,如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

原文鏈接:http://wely.iteye.com/blog/2329409

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 欧美成人一区二免费视频软件 | 毛片色| 精精国产xxxx视频在线播放 | 欧美日韩一区二区在线 | 免费一级特黄3大片视频 | 久久久国产精品 | 久久国产免费 | 视频在线一区二区 | 国产成人在线一区二区 | 在线亚洲精品 | 欧洲一级毛片 | 欧美一区二区三区在线观看视频 | 亚洲国产日韩av | 亚洲最大的黄色网 | 成人在线播放 | 最近高清无吗免费看 | 婷婷毛片 | 欧美精品在线一区 | 亚洲一区二区在线播放 | 成人在线观看免费视频 | 激情五月激情综合网 | 一区二区三区精品 | 国产精品视频网 | 国产精品久久久久国产a级 成人a在线视频 | 日韩一区二区三区福利视频 | 国产精品免费一区二区三区四区 | 国产中文在线 | 国产欧美精品在线 | 久久黄色 | 欧美一区二区免费在线 | 韩日精品视频 | 亚洲久草视频 | 午夜黄色| 视频1区2区 | 午夜欧美一区二区三区在线播放 | 亚洲在线一区 | 免费成人黄色网址 | 黑人av| 一区在线视频 | 日本久久网 | 午夜视频导航 |