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

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

          本文為原創(chuàng),如需轉(zhuǎn)載,請注明作者和出處,謝謝!

          #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開發(fā)完全講義(第2版)(本書版權(quán)已輸出到臺灣)

          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++ 原創(chuàng)

          評論

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

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

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

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

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

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

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

          沒錯 i = (b + e) / 2; 這句有隱患,當b+e大于int范圍時就會溢出。解決的方法是i = b/2 + e/2。這樣用2先除一下,就不會溢出了。
          2008-05-12 21:48 | 銀河使者
          主站蜘蛛池模板: 永川市| 拉萨市| 鄱阳县| 嘉兴市| 古田县| 郯城县| 镶黄旗| 仁寿县| 清水县| 财经| 敖汉旗| 梁平县| 五华县| 广平县| 新沂市| 鲁山县| 开平市| 郯城县| 新绛县| 伽师县| 香格里拉县| 厦门市| 文成县| 青神县| 盱眙县| 龙里县| 昌邑市| 花莲县| 金堂县| 苍南县| 铜梁县| 祁连县| 闸北区| 年辖:市辖区| 资中县| 泸溪县| 康保县| 惠安县| 东方市| 阳新县| 冷水江市|