您的位置:首页 > 理论基础 > 数据结构算法

2039-数据结构上机实验之二分查找

2017-09-21 23:56 429 查看
#include <bits/stdc++.h>

using namespace std;

int res[1001000];
int n;

/*二分查找:每次将key值与当前区间的下标mid比较
如果key > res[mid] 则在后区间继续查找
反之则在前区间查找
*/

/*非递归*/
/*int QuickSort(int k);

int main()
{
ios::sync_with_stdio(false);
int m;
while(cin >> n >> m)
{
for(int i = 0; i < n; i++)
{
cin >> res[i];
}
while(m--)
{
int key;
cin >> key;
key = QuickSort(key);
cout << key << endl;
}
}
return 0;
}

int QuickSort(int k)
{
int left = 0;
int right = n-1;
while(left <= right)
{
int mid = (left + right)/2;

if(k == res[mid])
{
return mid;
}
else if(k < res[mid])
{
right = mid-1;
}
else
{
left = mid+1;
}
}
return -1;
}
*/

/*递归实现*/
int QuickSort(int k, int right, int left);

int main()
{
ios::sync_with_stdio(false);
while(cin >> n)
{
for(int i = 0; i < n; i++)
{
cin >> res[i];
}
int key;
cin >> key;
key = QuickSort(key, 0, n-1);
if(key != -1)
{
cout << "YES" << endl;
}
else
{
cout << "NO" << endl;
}

}
return 0;
}

int QuickSort(int k, int right, int left)
{
if(right > left)
{
return -1;
}
int mid = (right + left)/2;
if(k == res[mid])
{
return mid;
}
else if(k < res[mid])
{
return QuickSort(k, right, mid-1);
}
else
{
return QuickSort(k, mid+1, left);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: