資料結構與演算法 二分查詢

2021-09-19 10:04:36 字數 1128 閱讀 8829

基礎概念:二分查詢又稱折半查詢,它是一種效率較高的查詢方法。

二分查詢要求:線性表是有序表,即表中結點按關鍵字有序,並且要用陣列作為表的儲存結構。不妨設有序表是遞增有序的。

通俗理解:每次首先找到陣列的中間位置(middle),然後把待查詢數(target)與middle進行比較。

如果查詢數target > middle,則將查詢範圍縮小到middle的右邊。(因為陣列是遞增有序的,而target又筆middle大,所以只可能在middle的右邊)

如果查詢數target < middle,則將查詢範圍縮小到middle的左邊

重複1。2操作,直到找到該數,或者沒有找到

/**

**插入排序

*date: 2019/4/14

****/

#include // 插入排序

/***

*二分查詢

*date: 2019/4/21

****/

#include // 二分查詢

int binarysearch(int *a, int n, int target)

if(target > a[middle])

if(target < a[middle]) }

return -1;

}// 遍歷陣列

void show(int *a,int n)

}void main();

int n = sizeof(a) / sizeof(a[0]); // 陣列長度

int target;

int res;

printf("原陣列:\n");

show(a,n);

printf("\n\n請輸入要查詢的元素:");

scanf("%d",&target);

res = binarysearch(a,n,target);

if(res != -1)else

printf("\n");

}

平均時間複雜度:o(logn)

空間複雜度: o(1)

資料結構與演算法 二分查詢

二分查詢的思想是在已經排序 公升序 的陣列中,如果要查詢的數比中位數小,那麼其位置只可能在左半部分,相反只能在右半部分。這樣每次把查詢區間縮小一半,比順序查詢效率快得多。非遞迴寫法 public static int binarysearchinasclooply int nums,int star...

資料結構與演算法,二分查詢

1.時間複雜度 每次能去掉一半即 logn 2.實現方式 while迴圈 與 遞迴 我更推薦 while 迴圈,因為遞迴有個潛在的問題就是 stack over flow 堆疊溢位 而且在實際工程中是盡量避免遞迴的。雖然遞迴寫起來方便,也不容易出錯。3.實現關鍵點 我總結了下,一共有以下四點 sta...

資料結構與演算法 二分查詢

以浙大mooc題目為背景進行非遞迴實現。list結構定義如下 typedef int position typedef struct lnode list struct lnode l是使用者傳入的乙個線性表,其中elementtype元素可以通過 進行比較,並且題目保證傳入的資料是遞增有序的。函式...