各种搜索算法比较--2015年7月26日16:42:45V1.0版

本文深入探讨了顺序查找和二分查找算法的核心概念与实现细节,包括算法原理、适用场景及代码实例。同时,介绍了如何在有序数组中高效地进行元素查找。

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;
 }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值