資料結構 查詢 二分查詢 插值查詢 斐波那契查詢

2021-10-08 17:23:54 字數 3127 閱讀 4485

二分查詢:對半比較,再對半比較,直到找到或找不到;

插值查詢:二分查詢法的公升級,根據查詢的內容算出比率,取代二分之一。(效率最高)

斐波那契查詢:也是二分查詢法為基礎,但是比率是按斐波那契數列進行的。

main.cpp

#include

#include

#include

#include

#include

"structfun.h"

using std::string;

using std::printf;

using std::scanf;

using std::endl;

using std::to_string;

void

main()

;int num=

0,key;

printf

("請輸入陣列個數:");

scanf

("%d"

,&num)

;inputarray

(data,num)

;printarray

(data,num)

;printf

("排序後:\n");

sortarray

(data,num)

;printarray

(data,num)

;printf

("請輸入要查詢的數:");

scanf

("%d"

,&key)

;binarysearch

(data,num,key)

;fibonaccisearch

(data,num,key)

;system

("pause");

}

structfun.h

//資料結構函式標頭檔案

#include

#include

#include

using std::cout;

using std::cin;

using std::string;

#define maxsize 100

#define ok 1

#define error 0

#define infinity 6430

//無窮大

typedef string elemtype;

//二分查詢法

void

inputarray

(int

*a,int num)

;void

printarray

(int

*a,int num)

;void

binarysearch

(int

*a,int num,

int key)

;void

fibonaccisearch

(int

*a,int num,

int key)

;//5、斐波那契查詢法(二分查詢法上改進)

void

fibonaccisearch

(int

*a,int num,

int key)

;void

sortarray

(int

*a,int num)

;

structfun.cpp

#include

#include

#include

#include

#include

"structfun.h"

#include

"time.h"

#include

using std::cout;

using std::cin;

using std::string;

using std::endl;

using std::ostringstream;

using std::stoi;

using std::to_string;

//查詢

//1、輸入陣列

void

inputarray

(int

*a,int num)

}//2、列印陣列

void

printarray

(int

*a,int num)

}//3、排序陣列

void

sortarray

(int

*a,int num)}}

//4、二分查詢及插值查詢

void

binarysearch

(int

*a,int num,

int key)

if(key) count++;}

if(a[mid]

==key)

printf

("找到了,查詢次數為%d在a[%d]\n"

,count,mid)

;else

printf

("*沒找到,找了%d次\n"

,count);}

//5、斐波那契查詢法(二分查詢法上改進)

void

fibonaccisearch

(int

*a,int num,

int key)

;int k=

0,first=

1,last=num,mid,count=0;

fibo[0]

=0; fibo[1]

=fibo[2]

=1;for

(int i=

3;fibo[i-1]

)while

(fibo[k]-1

//查詢num在fibo中的位置

k++;for

(int i=num;i;i++

) a[i]

=a[num]

;while

(first<=last)

else

if(key>a[mid]

)else}}

if(key!=a[mid]

)}

二分查詢 插值查詢 斐波那契查詢

在有序表中,取中間記錄作為比較物件,將其與給定值相比較,若其等於給定值,則查詢成功 若其小於給定值,則在中間記錄的右半區繼續查詢 若其大於給定值,則在中間記錄的左半區繼續查詢。不斷重複以上過程,直到查詢成功或無匹配記錄。使用該查詢方法的前提條件在於,線性表中的資料必須有序,且必須採用順序儲存的方式。...

二分查詢,插值查詢,斐波那契查詢

二分查詢,插值查詢,斐波那契查詢 1.二分查詢 偽 while left else if key arr left index 2 then right left right 2 else left left right 2 end 示例 public int midsearch listarr,i...

順序查詢 二分查詢,斐波那契查詢,插值查詢

include include include using namespace std void printerr else if arr mid ele else return 1 void print int i else if len 2 else if len 3 else if len 3...