二分查詢也屬於順序表查詢範圍,二分查詢也稱為折半查詢。二分查詢(有序)的時間複雜度為o(logn)。
那麼什麼是二分查詢呢?二分查詢的基本思想是, 在有序表中,取中間記錄作為比較物件,若給定值與中間記錄的關鍵字相等,則查詢成功;若給定值小於中間記錄的關鍵字,則在中間記錄的左半區繼續查詢;若給定值大於中間記錄的關鍵字,則在中間記錄的右半區繼續查詢。不斷重複上述過程,直到找到為止。
從二分查詢的定義我們可以看出,使用二分查詢有兩個前提條件:
1,待查詢的列表必須有序。
2,必須使用線性表的順序儲存結構來儲存資料。
下面是實現**。
c#版:
namespace程式輸出結果如圖:binarysearch.csharp
; console.writeline(
"********************二分查詢********************\n");
display(list);
int result = binarysearch(list, 40
);
if (result != -1) console.writeline("
40在列表中的位置是:
", result);
else console.writeline("
對不起,列表中不存在該元素!");
console.readkey();
}//////
二分查詢
/// ///
查詢表 ///
給定值 ///
給定值在列表中的位置
public
static
int binarysearch(list list, int
key)
else
}//沒有找到(查詢失敗)
return -1
; }
private
static
void display(ilistlist)
", item);}}
console.writeline(
"\n**********展示完畢**********\n");}}
}
c語言版:
/*程式輸出結果如圖:包含標頭檔案
*/#include
"stdio.h
"#include
"stdlib.h
"#include
"io.h
"#include
"math.h
"#include
"time.h
"#define ok 1
#define error 0
#define true 1
#define false 0
#define maxsize 20typedef
intstatus;
typedef
struct
seqlist;
/*二分查詢演算法(折半查詢)
*/int binarysearch(seqlist *seqlist,int
key)
else
}/*沒有找到
*/return -1;}
/*列印結果
*/void display(seqlist *seqlist)
printf(
"\n**********展示完畢**********\n");
}#define n 9
void
main()
;
for (i=0;i)
seqlist.length=n;
printf(
"***************二分查詢(c版)***************\n");
display(&seqlist);
j=binarysearch(&seqlist,40
);
if (j!=-1) printf("
40在列表中的位置是:%d\n
",j);
else printf("
對不起,沒有找到該元素!");
getchar();
}
資料結構和演算法系列10 五大查詢之二分查詢
二分查詢也屬於順序表查詢範圍,二分查詢也稱為折半查詢。二分查詢 有序 的時間複雜度為o logn 那麼什麼是二分查詢呢?二分查詢的基本思想是,在有序表中,取中間記錄作為比較物件,若給定值與中間記錄的關鍵字相等,則查詢成功 若給定值小於中間記錄的關鍵字,則在中間記錄的左半區繼續查詢 若給定值大於中間記...
資料結構和演算法系列13 五大查詢之雜湊查詢
這一篇要總結的是五天查詢的最後一篇,雜湊查詢,也稱為雜湊查詢 本文以雜湊稱呼 提起雜湊,我的第一印象就是c 中的hashtable類,它是由一組key value的鍵值對組成的集合,它就是應用了雜湊技術。那麼,什麼是雜湊查詢呢?在弄清楚什麼是雜湊查詢之前,我們要弄清楚雜湊技術,雜湊技術是在記錄的儲存...
資料結構和演算法 五大常用演算法 分支限界法
參考 分支限界法 類似於回溯法,也是一種在問題的解空間樹t上搜尋問題解的演算法。但在一般情況下,分支限界法與回溯法的求解目標不同。回溯法的求解目標是找出t中滿足約束條件的所有解,而分支限界法的求解目標則是找出滿足約束條件的乙個解,或是在滿足約束條件的解中找出使某一目標函式值達到極大或極小的解,即在某...