隨筆 - 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)  編輯  收藏 所屬分類: algorithm 、C/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 | 銀河使者
          主站蜘蛛池模板: 普定县| 宜州市| 右玉县| 大余县| 玉山县| 大荔县| 开化县| 十堰市| 饶阳县| 新乡县| 永州市| 姚安县| 苍溪县| 紫金县| 忻城县| 宝丰县| 崇仁县| 鄂托克旗| 虎林市| 临城县| 广汉市| 枞阳县| 香港| 宽城| 昭通市| 鹰潭市| 札达县| 上杭县| 贡觉县| 溧阳市| 丹巴县| 满城县| 宁德市| 弥勒县| 张家川| 桐城市| 鹤壁市| 禹州市| 大埔县| 聊城市| 全椒县|