C語言順序查詢和二分法查詢 折半查詢法

2021-10-12 13:00:00 字數 2670 閱讀 2983

顧名思義,就是按順序往下乙個乙個查詢,找到時返回,最差的情況是未找到並且全部遍歷了一遍,這是消耗時間最長的乙個方法

//順序查詢 

intseqsearch

(rectype r[

],keytype x,

int n)

}printf

("找不到該元素%d\n"

,x);

return-1

;}

顧名思義,折半查詢就是找乙個元素,沒找到就"切"一半繼續找,直接捨棄另一邊的元素

個人認為此方法需要建立在元素值已經排序後才可以進行查詢元素位置

話不多說先上圖

假設我們需要找到元素70的位置

先確定1位和末尾(圖中為11位)的位置,值賦給low和high代表左驅和右驅,中間位置(圖中為6)賦值給mid

這時肯定有同學會問(就是我自己了),如果中間位置有倆怎麼辦呢,其實這個mid值的資料型別的int型的,也就是說假設(3+6)/2=4.5時,int型別的mid會得到4,也就是整型資料不看小數點(不是四捨五入,是不看小數點)

接下來比對mid位置的值是否等於要查詢的值(圖中為70),此時可以看到,56<70,所以需要在值更大的區間去尋找(這也是為什麼我說二分法需要排序的原因),即進行 low=mid , mid=(left+right)/2

繼續比對,現在mid=80了,80>70,即需要在更小區間,即進行 right=mid,mid=(left+right)/2 操作

重複操作,直到left==right為止結束

//二分查詢 

inthalfsearch

(rectype r[

],keytype x,

int n)

if(r[mid]

.data>x)

else

if(r[mid]

.data

}printf

("找不到該元素%d\n"

,x);

return-1

;}

#include

#include

typedef

int keytype;

typedef

int infotype;

typedef

struct

rectype;

//建立

void

creatlist

(rectype r[

],keytype keys,

int n)

printf

("建立成功\n");

}//順序查詢

intseqsearch

(rectype r[

],keytype x,

int n)

}printf

("找不到該元素%d\n"

,x);

return-1

;}//二分查詢

inthalfsearch

(rectype r[

],keytype x,

int n)

if(r[mid]

.data>x)

else

if(r[mid]

.data

}printf

("找不到該元素%d\n"

,x);

return-1

;}//輸出

void

displist

(rectype r,

int n)

}int

main()

; rectype r[20]

;creatlist

(r,keys,10)

;displist

(r,10);

int local=

seqsearch

(r,4,10

);local=

seqsearch

(r,14,10

); local=

halfsearch

(r,18,10

);local=

halfsearch

(r,8,10);}

結果

建立成功

關鍵字:1 所對應的元素值為13

關鍵字:2 所對應的元素值為14

關鍵字:3 所對應的元素值為15

關鍵字:4 所對應的元素值為16

關鍵字:5 所對應的元素值為17

關鍵字:6 所對應的元素值為18

關鍵字:7 所對應的元素值為19

關鍵字:8 所對應的元素值為20

關鍵字:9 所對應的元素值為21

關鍵字:10 所對應的元素值為22

開始順序查詢元素=>4

找不到該元素4

開始順序查詢元素=>14

找到元素14了,在第2個

開始二分查詢元素=>18

找到18元素的位置為6

開始二分查詢元素=>8

找不到該元素8

二分法查詢(折半查詢)

一 二分法查詢思想 首先從陣列的中間mid開始查詢,如果剛好等於要查詢的值,則返回這個數字的所在位置。如果要查詢的數字比mid值小,則讓mid 1,做為陣列的右邊界,重複 1 操做 如果要查詢的數字比mid大,則讓mid 1做為陣列的左邊界,重複 1 操作。如果left right時,還沒有找到該數...

查詢 二分法查詢 折半查詢法

實現查詢指定數值在元素有序的陣列中儲存的位置 索引 返回該位置 索引 解題步驟 1.定義3個用來記錄索引值的變數,變數min記錄當前範圍最小索引值,初始值為0 變數max記錄當前範圍最大索引值,初始值為陣列長度 1 變數mid記錄當前當前範圍最中間元素的索引值,初始值為 min max 2 2.使用...

折半查詢法 二分法

在有序 設為公升序 表中,取中間元素作為比較物件,若給定值與中間元素的關鍵字相等,則查詢成功 若給定值小於中間元素的關鍵字,則在中間元素的左半區繼續查詢 若給定值大於中間元素的關鍵字,則在中間元素的右半區繼續查詢。不斷重複上述查詢過程,直到查詢成功,或所查詢的區域無該資料元素,查詢失敗。測試資料 1...