隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
          數據加載中……

          拆半查找的遞歸和非遞歸算法

          本文為原創,如需轉載,請注明作者和出處,謝謝!

          #include <stdio.h>  

          int binary_search(int x, int data[], int b, int e) 
          {     
              
          int i;     
              
          while(b <= e)     
              {     
                  i 
          = (b + e) / 2;     
                  
          if(data[i] == x) return i;     
                  
          if(data[i] < x)          
                      b 
          = i + 1;     
                  
          else         
                      e 
          = i - 1;             
              }     
              
          return -1;     
          }  

          int binary_search_recursion(int x, int data[], int b, int e) 
          {     
              
          int i;     
              i 
          = (b + e) / 2;     
              
          if(b > e) return -1;     
              
          if(data[i] != x)     
              {     
                  
          if(x < data[i])         
                      
          return binary_search_recursion(x, data, 0, i - 1);     
                  
          else         
                      
          return binary_search_recursion(x, data, i + 1, e);     
              }     
              
          else         
                  
          return i; 
          }  

          int main() 
          {     
              
          int data[] = {14579};     
              printf(
          "%d \n", binary_search_recursion(9, data, 04));     
              printf(
          "%d \n", binary_search(9, data, 04));     
              printf(
          "%d \n", binary_search_recursion(90, data, 04));     
              printf(
          "%d \n", binary_search(89, data, 04));     
              
          return 0




          Android開發完全講義(第2版)(本書版權已輸出到臺灣)

          http://product.dangdang.com/product.aspx?product_id=22741502



          Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


          新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

          posted on 2008-05-11 22:26 銀河使者 閱讀(2945) 評論(4)  編輯  收藏 所屬分類: algorithmC/C++ 原創

          評論

          # re: 拆半查找的遞歸和非遞歸算法  回復  更多評論   

          2分法不是這樣寫的吧?
          2008-05-12 10:26 | apPZ

          # re: 拆半查找的遞歸和非遞歸算法  回復  更多評論   

          嗯,應該是的,只是測試的例子多了些,也看了好半天。汗``
          2008-05-12 15:56 | dreamingnest

          # re: 拆半查找的遞歸和非遞歸算法  回復  更多評論   

          i = (b + e) / 2; 有問題,會溢出的。sun的jdk里面的二分查找源碼原先也有同樣的問題。
          2008-05-12 19:49 | www

          # re: 拆半查找的遞歸和非遞歸算法  回復  更多評論   

          沒錯 i = (b + e) / 2; 這句有隱患,當b+e大于int范圍時就會溢出。解決的方法是i = b/2 + e/2。這樣用2先除一下,就不會溢出了。
          2008-05-12 21:48 | 銀河使者
          主站蜘蛛池模板: 康乐县| 无棣县| 南澳县| 德江县| 赤峰市| 九寨沟县| 桃园市| 竹北市| 新宁县| 西吉县| 罗山县| 澄城县| 眉山市| 惠水县| 开远市| 阆中市| 色达县| 合阳县| 贵南县| 双流县| 民县| 庆云县| 峡江县| 郧西县| 铁岭县| 积石山| 合作市| 云霄县| 凤山市| 昭通市| 满城县| 金溪县| 裕民县| 鱼台县| 锦屏县| 曲麻莱县| 通化市| 辽宁省| 嘉义县| 西宁市| 白沙|