拆半查找的遞歸和非遞歸算法
本文為原創(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[] = {1, 4, 5, 7, 9};
printf("%d \n", binary_search_recursion(9, data, 0, 4));
printf("%d \n", binary_search(9, data, 0, 4));
printf("%d \n", binary_search_recursion(90, data, 0, 4));
printf("%d \n", binary_search(89, data, 0, 4));
return 0;
}
新浪微博:http://t.sina.com.cn/androidguy 昵稱:李寧_Lining
#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[] = {1, 4, 5, 7, 9};
printf("%d \n", binary_search_recursion(9, data, 0, 4));
printf("%d \n", binary_search(9, data, 0, 4));
printf("%d \n", binary_search_recursion(90, data, 0, 4));
printf("%d \n", binary_search(89, data, 0, 4));
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) 編輯 收藏 所屬分類: algorithm 、C/C++ 、 原創(chuàng)