<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                這一節我們接上一節繼續學習數組的常用操作。 數組的查找 這個功能我們以后會經常用到,這里我們先看一個對普通數組的查找方法 ~~~ /* 數組常見功能:查找. */ public static int getIndex(int[] arr,int x) { for(int i=0;i<arr.length;i++)//從第一個元素開始找 { if(arr[i] == x)//如果找到對應元素則返回當前元素索引 { return i; } } return -1;//如果沒有找到該元素則返回索引值-1 } ~~~ 上面的方法是一個普通的查找方法,因為我們在查找過程中可能對所有的元素都找一遍。 下面我們就看一個非常有名的查找算法,那就折半查找,也叫做二分查找。當然這個方法有一前提,那就是該數組必須為有序數組。 ~~~ public static int binarySearch(int[] arr,int key) { int min,mid,max;//定義三個變量做為三個指針 min = 0;//min代表最左邊的指針 mid = (min + max) / 2;//mid代表中間的指針 max = arr.length-1;//max代表最右邊的指針 while(arr[mid] != key)//當mid所指向的元素不等于key時,繼續查找,否則則終止循環 { if(key > arr[mid])//如果mid指向的元素小于key,則讓最左邊的min指針指向mid+1的位置 min = mid + 1; else if(key < arr[mid])//反之則讓最右邊的max指針指向mid-1位置 max = mid - 1; if(max < min)//如果出現max指針小于min指針時,說明沒有找到key對應的元素,則返回-1 return -1; mid = (min + max) / 2;//對中間的指針重新指向左右兩個指針的中點 } return mid;//當跳出循環說明找到了 } ~~~ 再看另一個相同的的方法 ~~~ public static int binarySearch_2(int[] arr,int key) { int min,mid,max; int min = 0; int max = arr.length-1; while(min <= max)//當min>max則終止循環,返回-1 { mid = (min + max) >> 1;//在循環內找出min指針和max指針的中點元素,>>1等同于除以2 if(key > arr[mid])//如果mid指向的元素小于key,則讓最左邊的min指針指向mid+1的位置 min = mid + 1; else if(key < arr[mid])//反之則讓最右邊的max指針指向mid-1位置 max = mid - 1; else return mid;//否則就是key = arr[mid],那當然就是找到了 } return -1; } ~~~ 我們測試一下 ~~~ import java.util.*; class ArrayDemo6 { public static void main(String[] args) { int[] arr = new int[]{43,56,98,2,5,36};//無序數組 int x = getIndex(arr,3); System.out.println("x="+x); int[] arr2 = new int[]{3,9,12,19,23,45};//有序數組 int index = binarySearch(arr2,15); System.out.println("index="+index); int index1 = binarySearch_2(arr2,19); System.out.println("index1="+index1); //真實開發中,我們運用Arrays類中的binarySearch(Object[] a,Object key)方法 int index2 = Arrays.binarySearch(arr2,45);//如果存在,返回具體的角標位置 System.out.println("index2="+index2); int index3 = Arrays.binarySearch(arr2,21);//如果不存在,返回的就是這個數的插入點(return -插入點-1) System.out.println("index3="+index3); } } ~~~ 結果: ![](https://box.kancloud.cn/2016-05-18_573c41721a033.jpg) 我們看到Arrays類中的binarySearch(Object[] a,Object key)方法實現了數組的二分查找,并且當查找不元素不存在時,返回值的其實指明了該key可以插入數組并且數組仍然有序的插入點。我們在實際開發中直接用這個方法就可以了。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看