隨筆 - 117  文章 - 72  trackbacks - 0

          聲明:原創作品(標有[原]字樣)轉載時請注明出處,謝謝。

          常用鏈接

          常用設置
          常用軟件
          常用命令
           

          訂閱

          訂閱

          留言簿(7)

          隨筆分類(130)

          隨筆檔案(123)

          搜索

          •  

          積分與排名

          • 積分 - 156286
          • 排名 - 390

          最新評論

          Java二分查找實現,歡迎大家提出交流意見.
          /**
          *名稱:BinarySearch
          *功能:實現了折半查找(二分查找)的遞歸和非遞歸算法.
          *說明:
          *     1、要求所查找的數組已有序,并且其中元素已實現Comparable<T>接口,如Integer、String等.
          *    2、非遞歸查找使用search();,遞歸查找使用searchRecursively();
          *
          *本程序僅供編程學習參考
          *
          *@author:   Winty
          *@date:     2008-8-11
          *@email:    [email]wintys@gmail.com[/email]
          */


          class BinarySearch<T extends Comparable<T>> {
              private T[]  data;//要排序的數據

              public BinarySearch(T[] data){
                  this.data = data;
              }

              public int search(T key){
                  int low;
                  int high;
                  int mid;

                  if(data == null)
                      return -1;

                  low = 0;
                  high = data.length - 1;

                  while(low <= high){
                      mid = (low + high) / 2;
                      System.out.println("mid " + mid + " mid value:" + data[mid]);///
                      
                      if(key.compareTo(data[mid]) < 0){
                          high = mid - 1;
                      }else if(key.compareTo(data[mid]) > 0){
                          low = mid + 1;
                      }else if(key.compareTo(data[mid]) == 0){
                          return mid;
                      }
                  }

                  return -1;
              }

              private int doSearchRecursively(int low , int high , T key){
                  int mid;
                  int result;

                  if(low <= high){
                      mid = (low + high) / 2;
                      result = key.compareTo(data[mid]);
                      System.out.println("mid " + mid + " mid value:" + data[mid]);///
                      
                      if(result < 0){
                          return doSearchRecursively(low , mid - 1 , key);
                      }else if(result > 0){
                          return doSearchRecursively(mid + 1 , high , key);
                      }else if(result == 0){
                          return mid;
                      }
                  }
                  
                  return -1;
              }

              public int searchRecursively(T key){
                  if(data ==null)return -1;

                  return doSearchRecursively(0 , data.length - 1 , key);
              }

              public static void main(String[] args){
                  Integer[] data = {1 ,4 ,5 ,8 ,15 ,33 ,48 ,77 ,96};
                  BinarySearch<Integer> binSearch = new BinarySearch<Integer>(data);
                  //System.out.println("Key index:" + binSearch.search(33) );

                  System.out.println("Key index:" + binSearch.searchRecursively(3) );

                  //String [] dataStr = {"A" ,"C" ,"F" ,"J" ,"L" ,"N" ,"T"};
                  //BinarySearch<String> binSearch = new BinarySearch<String>(dataStr);
                  //System.out.println("Key index:" + binSearch.search("A") );
              }
          }


          文章來源:http://wintys.blog.51cto.com/425414/94051
          posted on 2009-03-18 12:02 天堂露珠 閱讀(505) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 宜春市| 长岛县| 汤阴县| 昌宁县| 甘谷县| 金堂县| 吉林省| 高雄县| 彭山县| 菏泽市| 白玉县| 大关县| 屏东县| 瑞丽市| 芦山县| 麻栗坡县| 卓资县| 柳林县| 司法| 玉溪市| 鲁甸县| 平湖市| 平谷区| 盐津县| 溧阳市| 从江县| 芜湖市| 斗六市| 红河县| 庆元县| 当雄县| 洞头县| 潞西市| 藁城市| 信阳市| 松桃| 景东| 玉山县| 横峰县| 桂平市| 临湘市|