1. 程式人生 > >C語言經典演算法(九)——遞迴實現二分查詢的兩種方法

C語言經典演算法(九)——遞迴實現二分查詢的兩種方法

後繼續整理演算法並寫出自己的理解和備註。 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; }