PHP查詢演算法之二分查詢 折半查詢

2021-09-07 03:42:41 字數 1244 閱讀 8137

折半查詢意為從把陣列從中間分成兩半,找到乙個中間值,然後進行判斷,首先這個陣列一定是從大到小或者從小到大排好序的。

下面的**裡陣列是從小到大排序的。

遞迴形式的:

<?php

//定義乙個從小到大排好序的陣列

$arr = [12 , 34 , 43 , 56 , 77 , 86 , 88 , 90 , 99 , 101];

//要查詢的數字

$num = 88;

$count = count($arr);

//二分查詢(折半查詢)遞迴

function search($arr , $num , $start , $stop)

//判斷中間位置的值是否大於要查詢的值,那麼就從左邊區域查詢,起始位置不變,結束位置=中間位置-1

if ($arr[$mkey] > $num)

//判斷中間位置的值是否小於要查詢的值,那麼就從右邊區域查詢,結束位置不變,起始位置=中間位置+1

if ($arr[$mkey] < $num)

//如果起始位置大於結束位置那麼就終止

if ($start > $stop)

return search($arr , $num , $start , $stop);

}print_r(search2($arr , $num , 0 , $count));

非遞迴形式的:

<?php

//定義乙個從小到大排好序的陣列

$arr = [12 , 34 , 43 , 56 , 77 , 86 , 88 , 90 , 99 , 101];

//要查詢的數字

$num = 88;

$count = count($arr);

//二分查詢(折半查詢)非遞迴

function search2($arr , $num , $start , $stop)

//判斷中間位置的值是否大於要查詢的值,那麼就從左邊區域查詢,起始位置不變,結束位置=中間位置-1

if ($arr[$mkey] > $num)

//判斷中間位置的值是否小於要查詢的值,那麼就從右邊區域查詢,結束位置不變,起始位置=中間位置+1

if ($arr[$mkey] < $num)

} //結束

return false;

}print_r(search2($arr , $num , 0 , $count));

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

對於順序表中已經排好序的表來說,除了上篇文章中的可以比較大小外,還可以有另外一種思路,就是二分查詢。因為已經排好序了,可以直接比較中間值 中位數 如果中位數比要查詢的數大,那麼要查詢的數可能在前半部分 至少不可能在後半部分 因為後半部分一定比中位數大,也一定比要查詢的數大。繼續,把前半部分當做乙個新...

php查詢演算法,PHP演算法之二分查詢

二分查詢的定義 二分查詢也稱折半查詢 binary search 它是一種效率較高的查詢方法。但是,折半查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。演算法的要求 從上面的定義我們可以知道,滿足該演算法的要求必須如下兩點 必須採用順序儲存結構。必須按關鍵字大小有序排列。演算法的步...

二分查詢 折半查詢 演算法

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