zoukankan      html  css  js  c++  java
  • vector的二分查找算法

    #include <iostream>
    #include <vector>
    #include <string>
    #include "base/tools.hpp"
    
    using namespace std;
    
    class Test
    {
        public:
            int id;
            string name;
        public:
        Test(int _id,string _name)
        {
            id = _id;
            name = _name;
        }
    };
    
    int get(int key,vector<Test>::iterator begin_it,vector<Test>::iterator end_it,vector<Test>::iterator & it)
    {
        end_it -= 1;
        vector<Test>::iterator mid_it = begin_it + (end_it-begin_it)/2;
        int count = 0;
        while(begin_it <= end_it)
        {
            count++;
            if(mid_it->id == key)
            {
                it=mid_it;
                cout<<"total search count:"<<count<<endl;
                return true;
            }
            else
            {
                if(mid_it->id < key)
                {
                    begin_it = mid_it + 1;
                }
                else
                {
                    end_it = mid_it - 1;
                }
            }
            mid_it = begin_it + (end_it - begin_it)/2;
        }
        it = end_it;
        return false;
    }
    
    template<typename T> bool get2(int key,T begin_it,T end_it,T & it)
    {
        end_it -= 1;
        //typename vector<T>::iterator mid_it = begin_it + (end_it-begin_it)/2;
        T mid_it = begin_it + (end_it-begin_it)/2;
        int count = 0;
        while(begin_it <= end_it)
        {
            count++;
            if(mid_it->id == key)
            {
                it=mid_it;
                cout<<"total search count:"<<count<<endl;
                return true;
            }
            else
            {
                if(mid_it->id < key)
                {
                    begin_it = mid_it + 1;
                }
                else
                {
                    end_it = mid_it - 1;
                }
            }
            mid_it = begin_it + (end_it - begin_it)/2;
        }
        it = end_it;
        return false;
    }
    
    int main()
    {
        vector<Test> vect;
        for(int i = 0;i<10000000;i++)
        {
            Test test(i,int_to_str(i));
            vect.push_back(test);
        }
        //sort(vect.begin(),vect.end());
        cout<<"vector has builded!"<<endl;
        clock_t start,finish;
        start = clock();
        /*
        vector<Test>::iterator it = vect.begin();
        while(it!=vect.end())
        {
            if(it->id == 9999999)
            {
                cout<<"id:"<<it->id<<"\tname:"<<it->name<<endl;
                break;
            }
            it++;
        }
        */
        vector<Test>::iterator it;
        if(get(99999,vect.begin(),vect.end(),it))
        {
            cout<<"id:"<<it->id<<"\tit->name:"<<it->name<<endl;
        }
        else
        {
            cout<<"not found!"<<endl;
        }
    
        finish = clock();
        cout<<"程序共运行时间(s):"<<(double)(finish-start)/CLOCKS_PER_SEC<<"\n";
    
    }
  • 相关阅读:
    一个表缺失索引发的CPU资源瓶颈案例
    SQLServer 版本之八大方法搞清 "我是谁"
    DBA成长路线
    SQL Server2016升级前几点自检
    SQL Server 2016白皮书
    <译>通过PowerShell工具跨多台服务器执行SQL脚本
    /lib64/libc.so.6: version `GLIBC_2.17' not found
    /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found
    HGT高程数据文件格式解析
    DEM高程数据下载资源
  • 原文地址:https://www.cnblogs.com/tianyajuanke/p/2515117.html
Copyright © 2011-2022 走看看