1、顺序查找
int SequenceSearch(int a[],int n,int key) //顺序查找
{
for(int i = 0; i < n; i++)
{
if(key == a[i])
return i;
}
return -1;
}
2、二分查找
int BinarySearch(int a[],int n,int key) //二分查找(适用于有序数组)
{
int high = n - 1; //上边界
int low = 0; //下边界
while(low <= high) //当下边界小于上边界时循环
{
int mid = (high + low) / 2; //中位数
if(key > a[mid]) //如果key比a[mid]大,则边界改为[mid+1,high]
low = mid + 1;
else if(key < a[mid]) //如果key比a[mid]小,则边界改为[low,mid-1]
high = mid -1;
else
return mid; //返回mid的位置
}
return -1;
}
3、待完善
4、源代码
#include <iostream>
#include <fstream>
using namespace std;
int SequenceSearch(int a[],int n,int key) //顺序查找
{
for(int i = 0; i < n; i++)
{
if(key == a[i])
return i;
}
return -1;
}
int BinarySearch(int a[],int n,int key) //二分查找(适用于有序数组)
{
int high = n - 1; //上边界
int low = 0; //下边界
while(low <= high) //当下边界小于上边界时循环
{
int mid = (high + low) / 2; //中位数
if(key > a[mid]) //如果key比a[mid]大,则边界改为[mid+1,high]
low = mid + 1;
else if(key < a[mid]) //如果key比a[mid]小,则边界改为[low,mid-1]
high = mid -1;
else
return mid; //返回mid的位置
}
return -1;
}
int main()
{
//产生一个有序数值文件
// ofstream filesea("G:\\searchvalue.txt");
// for(int i = 1;i <= 10000; i++)
// {
// filesea << i <<" ";
// if(!(i % 10))
// filesea << endl;
// }
// filesea.close();
//从文件中提取数据
int a[200000]; //存储文件数据
int n = 0; //数据个数
ifstream files("G:\\searchvalue.txt");
if(!files.is_open())
{
cout<<"Error: file opening failure."<<endl;
return -1;
}
while(!files.eof())
{
files >> a[n++];
}
files.close();
int key; //需要查找的值
cin >> key;
//用哪个方法就取消哪个方法的注释
// cout << SequenceSearch(a,n,key) + 1 << endl;
cout << BinarySearch(a,n,key) + 1<< endl;
return 0;
}