算法基础之查找——顺序查找和二分查找

来源:互联网 发布:升级显卡用什么软件 编辑:程序博客网 时间:2024/06/05 23:04

           这一节,介绍以数组为载体的查找方法,介绍两种查找方法:顺序查找和二分查找

          (1)顺序查找

          顺序查找,顾名思义,按照元素索引的顺序进行查找以匹配要查找的目标,是针对无序数组的通用查找手段。

        算法思路是:从数组的首个元素开始,逐个匹配数组元素和查找目标,若找到,返回找到的元素索引,若遍历完没有找到,则返回-1。

          (2)二分查找

          二分查找,又名折半查找,是处理已排序数组的快速查找方式。

        算法思路是:每次对数组区间中间的元素和查找目标进行匹配和比较,如果不匹配,根据大小关系选择左区间或者右区间再进行比较,直到区间只剩下一个元素或者匹配为止。若找到(匹配),返回找到的元素索引,若没有找到,则返回-1。

       以整型数组为例,给出这两个查找方法的C++实例。

  #include<iostream>      using namespace std;  void QuickSort(int num[],int left,int right){if(left>=right) return;//待排序区间只有一个元素 终止int key,i,j;        i=left;//从左往右查找变量j=right;//从右往左查找变量key=num[left];//参考数while(i<j){while(num[j]>=key && j>i) j--;//从右往左查找while(num[i]<=key && i<j) i++;//从左往右查找if(i<j){int tmp=num[i];num[i]=num[j];num[j]=tmp;}  //交换}num[left]=num[i];num[i]=key;//参考数归位QuickSort(num,left,i-1);//对i左边区间排序QuickSort(num,i+1,right);//对i右边区间排序}int Search(int num[],int n,int find){for(int i=0;i<n;i++){if(num[i]==find)  return i;}return -1;}int BinarySearch(int num[],int n,int find){int left,right,mid;left=0;right=n-1;while(left<=right){mid=left+(right-left)/2;//防止数组越界  不写直接加和if(mid<find) left=mid+1;else if(mid>find) right=mid-1;else return mid;}return -1;}    int main()      {     int num[10]={4,7,1,0,8,9,3,2,5,6};     int find;    for(int i=0;i<10;i++) cout<<num[i]<<" ";cout<<endl;//case 1cout<<"输入要查找的数:"<<endl;   cin>>find;   cout<<"查找的索引为:"<<endl;    cout<<Search(num,10,find)<<endl;//case 2cout<<"对数组进行快速排序变为有序数组:"<<endl;   QuickSort(num,0,9);   for(int i=0;i<10;i++) cout<<num[i]<<" ";   cout<<endl;   cout<<"输入要查找的数:"<<endl;   cin>>find;   cout<<"查找的索引为:"<<endl;   cout<<BinarySearch(num,10,find)<<endl;system("pause");return 0;    }  



原创粉丝点击