日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++折半查找算法

發布時間:2025/3/15 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++折半查找算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

何謂折半查找,舉個例子很快就可以明白,給你了9個數 1 2 3 4 5 6 7 8 9 讓你去找2在哪里,這時候你肯定會說這太簡單了,但是計算機就沒那么強了,它得拿著2和這9個數一個一個的比較,2在前面還好比較的次數比較小,但是如果讓你找6在哪呢,需要比較的次數就多了,可能你覺得多這一次兩次沒什么差別,但是如果1到10000個數讓你找呢,這時候折半查找的優勢就顯現出來了。我們先看2在不在1-5里面也就是前半段,如果在前半段,我們直接不和后邊的數進行比較,我們確定2在1到5里面之后,我們再用類似的辦法再去掉一半,看2在不在1到3面里,如果不在我們去3到5里找,如此下去直到找到為止,我們會發現計算機最擅長干的事就是迭代,而優秀的算法就是讓計算機迭代的次數少一點。c++用代碼實現如下

#include<iostream> using namespace std; int main() {const int n=10;int i,number,top,bott,mid,loca,a[n];//mid用bott和top表示,方便迭代。bool flag=true,sign;//設置布爾變量即標志位。char c;cout<<"enter data:"<<endl;cin>>a[0];i=1;while(i<n){cin>>a[i];if(a[i]>=a[i-1])i++;elsecout<<"enter this data again:";//輸入已經排好序的數列,也可以加上冒泡排序自動排序}cout<<endl;for(i=0;i<n;i++)cout<<a[i]<<" ";cout<<endl;while(flag){cout<<"input number of to look for:";cin>>number;sign=false;top=0;bott=n-1;if((number<a[0])||(number>a[n-1]))loca=-1;while((!sign)&&(top<=bott)){mid=(bott+top)/2;if(number==a[mid]){loca=mid;cout<<"find"<<number<<",its position is"<<loca+1<<endl;sign=true;}else if(number<a[mid])bott=mid-1;//舍去后一半elsetop=mid+1;}if(!sign||loca==-1)cout<<number<<"has not found"<<endl;cout<<"continue or not";cin>>c;if(c=='n'||c=='N')flag=false;}return 0; }

輸入十個已經排好序的數,然后進行查找。

總結

以上是生活随笔為你收集整理的c++折半查找算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。