php的基本演算法 和排序方法

2021-07-25 19:21:33 字數 2155 閱讀 4993

有5個人偷了一堆蘋果,準備在第二天分贓。晚上,有一人遛出來,把所有菜果分成5份,但是多了乙個,順手把這個扔給樹上的猴了,自己先拿1/5藏了。沒想到其他四人也都是這麼想的,都如第乙個人一樣分成5份把多的那乙個扔給了猴,偷走了1/5。第二天,大家分贓,也是分成5份多乙個扔給猴了。最後一人分了乙份。問:共有多少蘋果?

for ($i = 1; ; $i++)}}

}}}}

一群猴子排成一圈,按1,2,…,n依次編號。然後從第1只開始數,數到第m只,把它踢出圈,從它後面再開始數,再數到第m只,在把它踢出去…,如此不停的進行下去,直到最後只剩下乙隻猴子為止,那只猴子就叫做大王。要求程式設計模擬此過程,輸入m、n, 輸出最後那個大王的編號。

function king($n, $m

) else

$i++;

}return

current($monkeys);}

$a = king(5, 2);

var_dump($a);

漢諾塔(又稱河內塔)問題是印度的乙個古老的傳說。開天闢地的神勃拉瑪在乙個廟裡留下了三根金剛石的棒,第一根上面套著64個圓的金片,最大的乙個在底下,其餘乙個比乙個小,依次疊上去,廟裡的眾僧不倦地把它們乙個個地從這根棒搬到另一根棒上,規定可利用中間的一根棒作為幫助,但每次只能搬乙個,而且大的不能放在小的上面。解答結果請自己執行計算,程式見尾部。面對龐大的數字(移動圓片的次數)18446744073709551615,看來,眾僧們耗盡畢生精力也不可能完成金片的移動。

後來,這個傳說就演變為漢諾塔遊戲:

1.有三根桿子a,b,c。a桿上有若干碟子

2.每次移動一塊碟子,小的只能疊在大的上面

3.把所有碟子從a杆全部移到c桿上

經過研究發現,漢諾塔的破解很簡單,就是按照移動規則向乙個方向移動金片:

如3階漢諾塔的移動:a→c,a→b,c→b,a→c,b→a,b→c,a→c

此外,漢諾塔問題也是程式設計中的經典遞迴問題。

function hanoi($n,$x,$y,$z

)else

}hanoi(3,'a','b','c');

使用php描述氣泡排序和快速排序演算法,物件可以是乙個陣列

//

對陣列氣泡排序

function bubble_sort($array

) }

}return

$array

;}

function quick_sort($array

)

$left_arr = quick_sort($left_arr

);

$right_arr = quick_sort($right_arr

);

return

array_merge($left_arr, array($key), $right_arr

);}

使用php描述順序查詢和二分查詢演算法,順序查詢必須考慮效率,物件可以是乙個有序陣列

//

使用二分查詢陣列中某個元素

function bin_sch($array, $low, $high, $k

)elseif ($k

< $array[$mid

])else

}return -1;

}

寫乙個二維陣列排序演算法函式,可以呼叫php內建函式,能夠具有通用性

function array_sort($arr, $keys, $order=0) 

$keysvalue = array

();

foreach($arr

as$key => $val

)

if($order == 0)

else

reset($keysvalue

);

foreach($keysvalue

as$key => $vals

)

$new_array = array

();

foreach($keysort

as$key => $val

)

return

$new_array

;}

PHP基本的排序演算法

一些常見的時間複雜度 小 大 o 1 o log2n o n o nlog2n o n 2 o n 3 o 2 n o n o n n 這四個排序時間複雜度 都是 o n 2 空間複雜度 快速排序 log2n o n 冒泡 選擇 插入 o 1 param arr return mixed 選擇排序 ...

PHP中基本排序演算法

思路分析 在要排序的一組數中,對當前還未排好的序列,從前往後對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即,每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。實現 arr array 1,43,54,62,21,66,32,78,36,76,39 functio...

演算法排序2 基本排序方法1

下一章下面的 基本都是使用comparable 介面,使用這個介面實現了主鍵的抽象,它給出了實現這個介面資料型別的物件的大小順序的定義。但是,不是每次都要使用這個介面,因為陣列元素的主鍵很可能只是每個元素的一小部分 概念 首先找到陣列中最小的元素,其次,將它和陣列的第乙個元素交換位置 如果第乙個元素...