二分查找的非递归实现

来源:互联网 发布:编程语言pascal 编辑:程序博客网 时间:2024/05/08 22:24
非递归实现易于理解,对于二分查找不做过多的解释,相对来讲逻辑简单一点对于二分查找同样是基于分治法的思想#include <iostream>#include<algorithm>#include<stdio.h>#include<stdlib.h>using namespace std;class BinarySearch{public :    //递归算法实现二分查找    int  Search(int arr[],int n,int object)    {        int low=0;        int high=n-1;        while(low<=high)        {            int middle  =(low+high)/2;            if(object==arr[middle])                return middle;            else if(object>arr[middle])                low=middle+1;            else            high=middle-1;        }        return -1;    }//冒泡排序    void Sort(int arr[],int n)    {        int temp;        for(int i=0; i<n-1; i++)            for(int j=0; j<n-i-1; j++)            {                if(arr[j]>arr[j+1])                {                    temp=arr[j];                    arr[j]=arr[j+1];                    arr[j+1]=temp;                }            }    }    void output(int arr[],int n)    {        for(int i=0;i<n;i++)        {            cout<<arr[i]<<"  ";        }    }};int main(){    int n;    int arr[5000];    int position;    BinarySearch a;    cout<<"请输入数组中的元素个数\n";    cin>>n;    for(int i=0; i<n; i++)        cin>>arr[i];     a.Sort(arr,n);     a.output(arr,n);    int object;    cout<<"请输入要查找的目标数字\n";    cin>>object;    position = a.Search(arr,n,object);    if(position!=-1)    {        cout<<"所寻找元素的下标是"<<position<<endl;        cout<<"该元素是"<<arr[position]<<endl;    }else    {        cout<<"没找到钙元素\n";    }    return 0;}
0 0
原创粉丝点击