C語言經典演算法(九)——遞迴實現二分查詢的兩種方法
阿新 • • 發佈:2018-10-31
後繼續整理演算法並寫出自己的理解和備註。 C++實現的:遞迴實現二分查詢演算法
1、 遞迴實現二分查詢
<1> 題目描述:針對資料,進行二分查詢(要求:資料的排列有序)
<2> 方法一:概念法
<3> 方法二:遞迴法
原始碼:
一、 遞迴實現二分查詢
1、 概念法
#include<iostream>
#include<assert.h>
using namespace std;
int Search(int ar[], int n, int key)
{
int low = 0;//低位值
int high = n-1;//高位值是元素個數-1
int mid;
while(low <= high)
{
mid = (low+high)/2;
if(key < ar[mid])
{
high = mid-1;//二分
}
else if(key > ar[mid])
{
low = mid+1;//二分
}
else
return mid;//找到值
}
return -1;//查詢資料不存在
}
void main()
{
int ar[10] = {12,23,34,45,56,67,78,89,90,100};//這種演算法只能在陣列有序的情況使用,如果無序,先進行排序
int n = sizeof(ar)/sizeof(int);
int key;
cout<<"請輸入要查詢的key值:>";
cin>>key;
cout<<"pos :> "<<Search(ar,n,key)<<endl;
}
2、 遞迴法
#include<iostream>
#include<assert.h>
using namespace std;
int Search(int ar[], int low, int high, int key)
{
if(low > high)//查詢不到
return -1;
int mid = (low+high)/2;
if(key == ar[mid])//查詢到
return mid;
else if(key < ar[mid])
return Search(ar,low,mid-1,key);
else
return Search(ar,mid+1,high,key);
}
void main()
{
int ar[10] = {12,23,34,45,56,67,78,89,90,100};
int n = sizeof(ar)/sizeof(int);
int key;
cout<<"請輸入要查詢的key值:>";
cin>>key;
cout<<"pos :> "<<Search(ar,0,n-1,key)<<endl;
}