折半查詢法的兩種實現

2021-06-09 02:49:47 字數 1323 閱讀 2788

折半查詢法的兩種實現

折半查詢法:

在有序表中,把待查詢資料值與查詢範圍的中間元素值進行比較,會有三種情況出現:

1)    

待查詢資料值與中間元素值正好相等,則放回中間元素值的索引。

2)    

待查詢資料值比中間元素值小,則以整個查詢範圍的前半部分作為新的查詢範圍,執行

1),直到找到相等的值。

3)    

待查詢資料值比中間元素值大,則以整個查詢範圍的後半部分作為新的查詢範圍,執行

1),直到找到相等的值

4)    

如果最後找不到相等的值,則返回錯誤提示資訊。

按照二叉樹來理解:中間值為二叉樹的根,前半部分為左子樹,後半部分為右子樹。折半查詢法的查詢次數正好為該值所在的層數。等概率情況下,約為

log2(n+1)-1

//data為要查詢的陣列,x為待查詢資料值,beg為查詢範圍起始,last為查詢範圍終止

//非遞迴法

int bisearch(int data, const int x, int beg, int last)

while(beg <= last)

else if (data[mid] < x)

else if (data[mid] > x)

}return -1;

}//遞迴法

int iterbisearch(int data, const int x, int beg, int last)

else if (x < data[mid])

else if (x > data[mid])

return -1;

}//主函式

int _tmain(int argc, _tchar* argv)

; int no2search = 45;

cout << "the array is : " << endl;

int siz = sizeof(data1)/sizeof(int);

for (int i = 0; i < siz; i++)

cout << endl;

int index = -1;

//index = bisearch(data1, no2search, 0, siz);

index = iterbisearch(data1, no2search, 0, siz);

cout << "index of " << no2search << " is " << index << endl;

getchar();

return 0;

}

折半查詢的原理及其java的兩種實現

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後...

折半查詢c 的兩種方法實現

折半查詢在資料結構演算法中是乙個比較實用的演算法。但是它是乙個只能用於查詢有順序的數,這並不影響它的使用,可以先實現乙個排序再進行查詢。折半查詢比較簡單,但是注意的點也比較多。下面我將用遞迴和非遞迴兩種方法進行實現。非遞迴 在取頭尾時有兩種選擇 左閉右閉 begin,end 左閉右開 begin,e...

03 兩種查詢演算法實現

什麼是列表查詢 順序查詢 線性查詢 二分查詢 順序查詢與二分查詢比較 執行時間 增速問題 一 什麼是查詢 二 順序查詢 線性查詢 從列表中查詢指定的元素 定義 從列表的第乙個元素開始,順序進行搜尋,直到找到元素或搜尋到列表最後乙個元素為止。線性查詢的 實現 enumerate 函式用於將乙個可遍歷的...