//实验四
#include <iostream>
using namespace std;
//顺序查找与二分查找
//顺序查找就是循环
//二分查找
//使用前提:数据必须排序
int ordersearch(int* a, int x, int n, int count[])
{
int k;
for (int i=0; i < n; i++)
{
count[0]++;
if (a[i] == x)
{
k = i;
cout << "找到了元素位置:" << k << endl;
return k;
}
}
}
int binarysearch(int* a, int x, int n, int count[])
{
int low;
int high;
low = 0;
high = n - 1;
while (low <= high)
{
int mid = (low + high) / 2;
count[0]++;
if (a[mid] == x)
{
cout << "找到了元素位置:" << mid << endl;
return mid;
}
else if (a[mid] < x)
{
low = mid + 1;
}
else if (a[mid] > x)
{
high = mid - 1;
}
}
return -1;
}
int main() {
int a[] = { 11,33,44,56,78,89,99,101,123,235,678 };
int count[1] = { 0 };
int num = sizeof(a) / sizeof(int);
//cout << (9 + 10) / 2 << endl;
count[0] = 0;
ordersearch(a, 678, num, count);
cout << "顺序检索在最差情况下(这里用的是检索的是最后一个)的比较次数为:" << count[0] << endl;
count[0] = 0;
binarysearch(a, 678, num,count);
cout << "二分检索在最差情况下(这里用的是检索的是最后一个)的比较次数为:" << count[0] << endl;
count[0] = 0;
ordersearch(a, 99, num, count);
cout << "顺序检索在一般情况下(这里用的是检索的是中间一个)的比较次数为:" << count[0] << endl;
count[0] = 0;
binarysearch(a, 99, num, count);
cout << "二分检索在一般情况下(这里用的是检索的是中间一个)的比较次数为:" << count[0] << endl;
count[0] = 0;
ordersearch(a, 11, num, count);
cout << "顺序检索在最佳情况下(这里用的是检索的是第一个)的比较次数为:" << count[0] << endl;
count[0] = 0;
binarysearch(a, 11, num, count);
cout << "二分检索在最佳情况下(这里用的是检索的是第一个)的比较次数为:" << count[0] << endl;
return 0;
}