折半查詢的思路:
在順序陣列中,找到初始值(最小值),中間值,最大值,分別以low,mid,high表示。
然後進行迴圈查詢,例如圖:low=1,high=16,mid=(low+high)/2
如果key值剛好等於中間值mid,則返回中間值。
如果所求值key比中間值大,則在mid與high之間在進行第二次查詢,並把新的low值賦值成mid+1,high值不變,再求新的mid值,如此迴圈,迴圈進行的條件為初始值不大於最大值。
如果所求值key比中間值小,則與上相反。
**如下:
#include
//折半查詢(適用於順序陣列)
intbinsearch
(int arr,
int len,
int key)
else
if(arr[mid]
< key)
//中間值小於要找的值key,在中間值右邊找
else
//在中間值左邊找
}return-1
;//找不到返回-1;
}int
main()
;int len =
sizeof
(arr)
/sizeof
(arr[0]
);printf
("所給陣列為:arr =\n");
printf
("數字10在陣列中的下標為:\n");
printf
("%d\n"
,binsearch
(arr,len,10)
);return0;
}
結果如圖
折半查詢法(僅適用於已排好順序)
includeusing namespace std templateint binarysearch type array,int lenght,type key 不適用於char 型別 array mid key right mid 1 left mid 1 return 1 int main ...
折半查詢法(有序陣列)
在有序陣列中查詢時 從陣列的中間元素開始查詢,如果中間元素正好是要查詢的元素,則搜尋過程結束,如果所找元素大於 小於 中間元素,則在陣列大於 小於 中間元素的那一半中查詢,每一次跟開始一樣從中間元素開始比較。如果在某一步驟陣列為空,則代表找不到。這種搜尋演算法每一次比較都使搜尋範圍縮小一半,相對於遍...
多選項查詢,適用於愛好等的搜尋,有時何必行轉列
create table t ids int identity,name varchar 100 insert into t name select 1,2,3 union all select 4,2,3 union all select 5,2,3 union all select 6,2,3 ...