折半查詢與斐波那契查詢演算法實現

2021-09-02 00:24:49 字數 1395 閱讀 3997

折半查詢:先確定待查記錄的所在的範圍,然後逐步縮小範圍直到找到或找不到該記錄為止

**實現:

/**

* @name 線性表查詢

* @use 從線性表中查詢乙個元素

* @param list 線性表

* @param aim 目標元素

* @type order_01|order_02|not_order 線性表為公升序序|線性表為降序|線性表為無序

* @return index 目標元素的下標

*/public static function linerfind($list, $aim, $type)

}return false;

}$low = 0;

$height = count($list) - 1;

if ($type == self::$order_up)

if ($aim > $list[$index]) else

} return false;

}if ($type == self::$order_desc)

if ($aim > $list[$index]) else

} return false;}}

斐波那契查詢:按照斐波那契數列來確定分割點,假設表中記錄個數比某個斐波那契數小於1,即n=fu-1,則查詢分割點為斐波那契數f(u-1)的值,如此將表中記錄分為了n1和n2兩部分,其中n1中元素數目等於斐波那契數f(u-1) - 1 的值,而n2中元素的個數為斐波那契數f(u-2) - 1的值。如果給定值等於n則查詢成功,如果給定值大於n則在n2中進行斐波那契查詢,如果跟定值小於n則在n1中進行斐波那契查詢。

**實現:

/**

* @name 斐波那契查詢

* @use 使用斐波那契查詢法從有序陣列中找目標元素

* @param arr 陣列

* @param aim 目標元素

* @return index|false 目標元素下標|未找到

*/public static function findfibonacci($arr, $aim)

$low = 0;

$height = $num;

$count = 0;

while ($low <= $height)

if ($value >= $num)

}if ($aim == $arr[$index]) else if ($aim > $arr[$index]) else

}return false;

}

演算法 查詢 斐波那契查詢

相對於二分查詢和差值查詢,斐波那契查詢的實現略顯複雜。但是在明白它的主體思想之後,掌握起來也並不太難。既然叫斐波那契查詢,首先得弄明白什麼是斐波那契數列。相信大家對這個著名的數列也並不陌生,無論是c語言的迴圈 遞迴,還是高數的數列,斐波那契數列都是乙個重要的存在。而此處主要是用到了它的一條性質 前乙...

斐波那契查詢演算法

與二分查詢相比,斐波那契查詢演算法的明顯優點在於它只涉及加法和減法運算,而不用除法。因為除法比加減法要占去更多的機時,因此,斐波那契查詢的平均效能要比折半查詢好。include void fibonacci int f int fibonacci search int a,int key,int n...

斐波那契查詢演算法

斐波那契查詢的核心是 1 當key a mid 時,查詢成功 2 當keya mid 時,新的查詢範圍是第mid 1個到第high個,此時範圍個數為f k 2 1個,即陣列右邊的長度,所以要在 f k 2 1 範圍內查詢。如下 1 include2 include 3 include4 includ...