二分查詢:對半比較,再對半比較,直到找到或找不到;
插值查詢:二分查詢法的公升級,根據查詢的內容算出比率,取代二分之一。(效率最高)
斐波那契查詢:也是二分查詢法為基礎,但是比率是按斐波那契數列進行的。
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...