C語言實現(xiàn)順序表的順序查找和折半查找
更新時間:2020年11月01日 12:14:39 作者:Andrelia20171760
這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)順序表的順序查找和折半查找,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了C語言實現(xiàn)順序表的順序查找和折半查找的具體代碼,供大家參考,具體內(nèi)容如下
順序查找:
#include <iostream> using namespace std; int SeqSearch(int r[],int n,int k) { r[0]=k;//下標(biāo)0用作哨兵存放要查詢的數(shù) int i=n; while(r[i]!=k)//不用判斷下標(biāo)i是否越界 { i--; } return i; } int main() { int n; cout<<"請輸入數(shù)組元素個數(shù):"<<endl; cin>>n; int a[n+1]; cout<<"請輸入數(shù)組元素:"<<endl; for(int i=1;i<=n;i++) { cin>>a[i]; } int k; cout<<"請輸入要查詢的數(shù):"<<endl; cin>>k; for(int i=1;i<=n;i++) { cout<<a[i]<<" "; } cout<<endl; cout<<"該數(shù)在數(shù)組中的位置為:"; cout<<SeqSearch(a,n,k); return 0; }
折半查找:
#include<iostream> using namespace std; int BinSearch1(int r[],int n,int k)//非遞歸 { int low=1,high=n;//設(shè)置查找區(qū)間 while(low<=high)//如果區(qū)間存在 { int mid=(low+high)/2; if(k<r[mid])high=mid-1;//查找在左半?yún)^(qū)進行,回到while那一步 else if(k>r[mid])low=mid+1; else return mid; } return 0;//如果區(qū)間不存在,則返回0,查找失敗 } int BinSearch2(int r[],int low,int high,int k)//遞歸 { int mid=(low+high)/2; if(low>high) return 0; else { if(k<r[mid])BinSearch2(r,low,mid-1,k); else if(k>r[mid])BinSearch2(r,mid+1,high,k); else return mid; } } int main() { int n; cout<<"請輸入數(shù)組元素個數(shù):"; cout<<endl; cin>>n; int a[n+1]; cout<<"請輸入數(shù)組元素:"; cout<<endl; for(int i=1;i<=n;i++) { cin>>a[i]; } cout<<"請輸入要查找的數(shù):"; cout<<endl; int k; cin>>k; cout<<"該數(shù)在數(shù)組中的位置是:"<<endl; cout<<BinSearch1(a,n,k);cout<<endl; cout<<BinSearch2(a,1,n,k); }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
c++中拷貝構(gòu)造函數(shù)的參數(shù)類型必須是引用
如果拷貝構(gòu)造函數(shù)中的參數(shù)不是一個引用,即形如CClass(const CClass c_class),那么就相當(dāng)于采用了傳值的方式(pass-by-value),而傳值的方式會調(diào)用該類的拷貝構(gòu)造函數(shù),從而造成無窮遞歸地調(diào)用拷貝構(gòu)造函數(shù)。因此拷貝構(gòu)造函數(shù)的參數(shù)必須是一個引用2013-07-07