演算法 二分查詢(折半查詢)

2021-09-14 05:20:34 字數 1057 閱讀 4111

二分查詢也稱折半查詢(binary search),它是一種效率較高的查詢方法。

使用二分查詢的條件:

1.必須採用順序儲存結構。

2.必須按關鍵字大小有序排列。

通俗一點的說:如果資料是乙個陣列,那麼這個陣列必須是有序的

時間複雜度:o(log2n)

如圖所示:

下面我們來看c語言**:

#include非遞迴實現:

void binarysearch(int *arr, int len, int k)

else if (k > arr[mid])

else

}if (left > right)

}遞迴實現:

void binarysearch1(int *arr, int len, int k, int left, int right)

else if (k > arr[mid])

else

}else

}

下面我們看c++**實現:

#includeusing namespace std;

//這裡使用了模板,可對所有的資料型別進行查詢

templateint compare(const t a,const t b)

if (a < b)

return 0;

}typedef char * ptr;

template<>

int compare(const ptr a, const ptr b)

if (strcmp(a,b)<0)

return 0;

}template int binarysearch(t a, l val, int left, int right, pre compare)

while (left <= right)

if (compare(val, a[mid]) == -1)

if(compare(val, a[mid]) == 0)

} return -1;

}

二分查詢 折半查詢 演算法

二分查詢也稱折半查詢 binary search 它是一種效率較高的查詢方法。但是,折半查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。首先,假設表中元素是按公升序排列,將表中間位置記錄的 關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置 記錄將表分成前 後兩個子...

演算法 二分查詢(折半查詢)

一.二分查詢基本思想 在有序的序列裡,先將目標和中間的數值比較,如果大於中間數值,則在後半段的中間繼續比對 如果小於中間數值,則在前半段的中間繼續比對。以此類推,直至找到目標,或者結束查詢沒有找到。二.關鍵條件 1 有序序列 2 順序儲存結構 三.時間複雜度 o logn 四.優點和不足 優點是比較...

折半查詢 二分查詢 演算法

順序查詢的優點是演算法簡單,表中對有序性無要求,但是查詢效率比較低。折半查詢跟普通的順序查詢的區別是 折半查詢要求表中的元素是有序的,並且是採用順序儲存的,不能是鏈式儲存的。折半查詢的主要思路是 在有序的表中,取得表中的中間記錄進行比較。如果給定查詢的值和中間記錄相等,就表示查詢成功 如果給定查詢的...