do while版
#include <iostream>
using namespace std;
const int MAX = 12983;
int main()
{
int n;
cin >> n;
int a[MAX];
for (int i=0;i<MAX;++i)
a[i] = i;
int top=(0),end(MAX-1);
do
{
int middle = (top+end)/2;
cout << "现在的中间节点是:" << middle << endl;
if(n>a[middle])
{
top = middle+1;
}
else if (n<a[middle])
{
end = middle-1;
}
else if (n == a[middle])
{
cout << "找到了:" << a[middle] << endl;
break;
}
}while(top<end);
system("pause");
}
for版
#include <iostream>
using namespace std;
const int MAX = 12983;
int main()
{
int n;
cin >> n;
int a[MAX];
for (int i=1;i<=MAX;++i)
a[i] = i;
int top = 1;
int end = MAX;
for (;top<end;)
{
int middle = (top+end)/2;
cout << "现在的中间节点是:" << middle << endl;
if (n<a[middle])
{
end = middle-1;
}
else if (n>a[middle])
{
top = middle+1;
}
else if(n==a[middle])
{
cout << "找到了:" << a[middle] << endl;
break;
}
}
system("pause");
}
goto 版
#include <iostream>
using namespace std;
const int MAX = 1023;
int main()
{
int a[MAX];
int n;
cin >> n;
for (int i=1;i<=MAX;++i)
a[i] = i;
int top(1),end(MAX);
goo:
int mid = (top+end)/2;
cout << "中间节点变化:" << mid << endl;
if (n>a[mid])
{
top = mid+1;
goto goo;
}
else if(n<a[mid])
{
end = mid-1;
goto goo;
}
else if (n==a[mid])
{
cout << "找到了:" << a[mid] << endl;
}
system("pause");
return 0;
}
递归版
#include <iostream>
using namespace std;
const int MAX = 12983;
/*int recursive(const int a[],int n,int top,int end)
{
}*/
/*template <typename T,size_t Size>
size_t sizeofArray(const T (&)[Size])
{
return Size;
}*/
template <typename T, size_t Size>
void recursive(const T (&a)[Size],int top,int end,int n)//数组 顶部 底部 查找号码
{
int mid = (top+end)/2;
cout << "现在的中节点为:" << mid << endl;
if (n>a[mid])
{
top = mid+1;
recursive(a,top,end,n);
}
else if (n<a[mid])
{
end = mid-1;
recursive(a,top,end,n);
}
else if (n==a[mid])
{
cout << "找到了:" << a[mid];
return;
}
};
int main()
{
int n;
cin >> n;
int a[MAX];
for (int i=1;i<=MAX;++i)
a[i] = i;
int top(1),end(MAX);
recursive(a,top,end,n);
//cout << sizeofArray(a);//数组 需要找的数字 top max
system("pause");
}
while版
#include <iostream>
using namespace std;
const int MAX = 1024;
int main()
{
int a[MAX];
for (int i=1;i<=MAX;++i)
a[i] = i;
//cout << a;
int shang = 1;
int xia = MAX;
int num = 0;
while (shang<xia)
{
int zhong = (shang+xia)/2;
cout << "zhong:" << zhong << endl;
if(num<a[zhong])
{
xia = zhong-1;
}
else if(num>a[zhong])
{
shang = zhong+1;
}
else if(num==a[zhong])
{
cout << "找到了:" << a[zhong] << endl;
break;
}
}
system("pause");
}