隨筆 - 0, 文章 - 75, 評論 - 0, 引用 - 0
          數(shù)據(jù)加載中……

          java折半查找(面試題)

          public class TextSort2 {



          public static void main(String[] args) {
          int[]
          arrs={13,26,27,34,52,88,323}; //數(shù)組必須為有序數(shù)組
          System.out.println(find(arrs,323));
          }

          折半查找:

          數(shù)組必須為有序數(shù)組
          思路:先找到數(shù)組中間位置的數(shù),用要查詢的數(shù)與其比較:

          如果大于中間數(shù),則往數(shù)組中間數(shù)的較大一方(右側(cè)查找)
          如果小于中間數(shù),則往數(shù)組中間數(shù)的較小一方(左側(cè)查找)

          如果等于中間數(shù),則直接返回該位置
          如果沒找到,返回-1
          @param arrs 有序數(shù)組

          @param key 要查詢的數(shù)
          private static int find(int[] arrs,int key){
          int min=0; //定義最小數(shù)索引為0
          int max=arrs.length-1; //定義最大數(shù)索引為數(shù)組長度-1
          int
          middle; //定義中間數(shù)

          while(true){

          middle=(min+max)/2;   //每次得到中間數(shù)

          if(key==arrs[middle]){
          //如果key等于中間數(shù)
            return
          middle;
            }else if(key>arrs[middle]){

          min=middle+1;
          //設(shè)置最小位置min為middle+1,并從這個位置往后查找
            }else if(key<arrs[middle]){

          max=middle-1;
          //設(shè)置最大位置max為middle-1,并從這個位置往前查找

          }
            if(max<min){
          //如果最小位置min,都大于最大位置索引max,則沒找到
              return -1;
           
          }
          }
          }



          }

          posted on 2012-04-22 15:20 hantai 閱讀(106) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 巨野县| 涟水县| 嘉兴市| 宜兰县| 威宁| 石棉县| 锡林浩特市| 东辽县| 响水县| 合山市| 巩留县| 新巴尔虎左旗| 泸西县| 平昌县| 浪卡子县| 肃宁县| 和平区| 林周县| 尼玛县| 柳州市| 邳州市| 临海市| 玉门市| 宣城市| 富蕴县| 宁德市| 曲松县| 鄂尔多斯市| 板桥市| 广昌县| 手机| 呼伦贝尔市| 汉寿县| 武山县| 淅川县| 左权县| 新乐市| 方正县| 原平市| 南汇区| 南和县|