二分法(递归非递归)
遞歸:
#include <iostream>?? ?
using namespace std;
bool binary(int *arr,int low,int high,int flag,int &temp)
{
?? ?int middle;
?? ?if(low>high)
?? ??? ?return false;
?? ?middle=(low+high)/2;
?? ?if(arr[middle]==flag)?
?? ?{
?? ??? ?temp=middle;
?? ??? ?return true;
?? ?}?
?? ??? ?
?? ?if(arr[middle]<flag) ??
??? ??? ?return binary(arr,middle+1,high,flag,temp);
?? ?else ? ? ? ? ? ? ? ? ??
?? ??? ?return binary(arr,low,high-1,flag,temp);?? ??? ??? ??
}
int main()
{
?? ?while(1)
?? ?{
?? ??? ?int arr[100];
?? ??? ?for(int i=0;i<10;i++)
?? ??? ??? ?cin>>arr[i];
?? ??? ?int temp;
?? ??? ?int abc;
?? ??? ?cout<<"輸入要查找的數:(限定了十個數)"<<endl;
?? ??? ?cin>>abc;
?? ??? ?if( binary(arr,0,9,abc,temp) )
?? ??? ?{
?? ??? ??? ?if(arr[temp]==abc)
?? ??? ??? ??? ?cout<<"二分查找成功"<<endl;?? ?
?? ??? ?} ?? ?
?? ?}
?? ?return 0;
}
?
非遞歸:
#include <iostream> ? ?//二分法非遞歸實現。?
#include <algorithm>
using namespace std;
int arr[100];
int temp;
bool binary(int low,int high,int &ans)
{
? ? while(low<=high)
? ? {
? ? ? ? int middle=(low+high)/2;
? ? ? ? if(arr[middle]==temp)
? ? ? ? {
? ? ? ? ? ? ans=middle;
? ? ? ? ? ? return true; ? ?
? ? ? ? }
? ? ? ? if(arr[middle]<temp)
? ? ? ? ? ? low=middle+1;
? ? ? ? if(arr[middle]>temp)
? ? ? ? ? ? high=middle-1; ? ?
? ? } ? ?
? ? return false;
}?
int main()
{
? ? int n;
? ? cout<<"請輸入n"<<endl;
? ? while(cin>>n)
? ? {
? ? ? ? cout<<"請輸入數組中的數(按照順序輸入)"<<endl;
? ? ? ? for(int i=0;i<n;i++)
? ? ? ? ? ? cin>>arr[i];
? ? ? ? cout<<"請輸入要查找的數據"<<endl;
? ? ? ? cin>>temp; ? ? ? ? ? ? ? ? ? ?
? ? ? ? int ans;
? ? ? ? if(binary(0,n-1,ans))
? ? ? ? {
? ? ? ? ? ? cout<<"要查找的數據在第"<<ans+1<<"個"<<endl;?
? ? ? ? }
? ? ? ? else?
? ? ? ? ? ? cout<<"沒找到。"<<endl;
? ? } ? ??
? ? return 0;
}
總結
以上是生活随笔為你收集整理的二分法(递归非递归)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Restoring Road Netwo
- 下一篇: Snuke Festival(二分法)