二分 折半 查詢

2021-06-19 06:20:07 字數 1662 閱讀 8072

折半查詢:又叫二分查詢,採用分治思想,適用於不經常變動且查詢頻繁的表;

演算法思想:

將n個元素(假設n個元素公升序)分為大致相同的兩部分,取data[n / 2] 與目標元素m比較:

若data[n/2] == m:return (n / 2);

若data[n/2] > m:則我們只要在data的左半部分繼續查詢;

若data[n/2] < m:則我們只要在data的有半部分繼續查詢;

時間複雜度:o(logn)

優點:比較次數少,查詢速度快,平均效能好;

缺點:要求待查表為"有序表",且插入刪除困難;

邊界錯誤問題:

(1)左閉右開區間([left , right))。

left = 0 , right = length;

迴圈條件while(left < right):

data[middle] > m:right = middle;

data[middle] < m: left = middle + 1;

(2)左右皆閉區間([left , right])。

left = 0 , right = length - 1;

迴圈條件while(left <= right):

data[middle] > m:right = middle - 1;

data[middle] < m:left = middle + 1;

迴圈體外的初始化條件與迴圈體內的初始化條件,在迭代時必須一致的區間規則;

**實現:

#include#includeusing  namespace std;

//---------------------------------------------二分查詢(順序查詢)---------------------------------------

int binsearch_soulation1(const int* data , int length , int m)

else if(data[middle] < m)

else

}return -1;

}int binsearch_soulation2(const int* data , int length , int m)

else if(data[middle] < m)

else

}return -1;

}int binsearch_soulation3(const int* data, int length, int m)

return right;

}

二分 折半 查詢

二分查詢 請對乙個有序陣列進行二分查詢 輸入乙個數看看該陣列是否存在此數,並且求出下 標,如果沒有就提示 沒有這個數 二分查詢演算法的思路 二分 折半 查詢條件 有序陣列。public class binarysearch 不考慮有重複元素的查詢。int index solutionsearch a...

C 二分 折半 查詢

首先,假設表中元素是按公升序排列,將表 中間位置記錄的關鍵字 與 查詢關鍵字 進行比較,如果兩者相等,則查詢成功。否則,利用 中間位置的記錄 將表分成 前後 兩個子表 1 如果 查詢關鍵字 2 如果 查詢關鍵字 中間關鍵字 後子表查詢。重複以上過程,直到查詢成功。include include us...

二分(折半)查詢演算法

二分查詢又稱折半查詢,它是一種效率較高的查詢方法。折半查詢的演算法思想是將數列按有序化 遞增或遞減 排列,查詢過程中採用跳躍式方式查詢,即先以有序數列的中點位置為比較物件,如果要找的元素值小於該中點元素,則將待查序列縮小為左半部分,否則為右半部分。通過一次比較,將查詢區間縮小一半。折半查詢是一種高效...