隨筆 - 117  文章 - 72  trackbacks - 0

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

          常用鏈接

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

          訂閱

          訂閱

          留言簿(7)

          隨筆分類(130)

          隨筆檔案(123)

          搜索

          •  

          積分與排名

          • 積分 - 156008
          • 排名 - 389

          最新評論

          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 天堂露珠 閱讀(503) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 博罗县| 钟祥市| 藁城市| 南召县| 鄂温| 新邵县| 西畴县| 伽师县| 依安县| 来安县| 新宁县| 孙吴县| 泰和县| 永济市| 施甸县| 灌阳县| 文成县| 大城县| 枝江市| 曲阳县| 临沭县| 新竹县| 武义县| 拉萨市| 微山县| 枞阳县| 长白| 红安县| 潞西市| 鸡泽县| 尚志市| 万山特区| 沙河市| 遂川县| 萨嘎县| 通江县| 肇庆市| 景德镇市| 津市市| 平阳县| 额尔古纳市|