PHP版常用演算法

2021-08-19 02:20:45 字數 2149 閱讀 4648

最近準備面試的資料,順便整理一下以前的基本演算法,寫個demo記錄一下

冒泡

//冒泡

//逐行對比,滿足條件則交換

function

bubblesort

($arrdata,$sort = 'desc')

}if($issorted) break;

}return

$arrdata;

}

快速排序
//快速排序

//選取乙個標準,和其他資料對比後將資料分為兩批,遞迴執行後合併

function

quicksort

(&$arr, $sort = 'asc') else

}$arr = array_merge($this->quicksort($arrleftdata, $sort), array($nstandard), $this->quicksort($arrrightdata, $sort));

}return

$arr;

}

歸併排序
//利用歸併(合併)的思想實現的排序方法。

//它的原理是假設初始序列含有 n 個元素,則可以看成是 n 個有序的子串行,每個子串行的長度為 1,然後兩兩歸併

//得到n/2個長度為2或1 的有序序列;再兩兩歸併,······,如此重複

//直至得到乙個長度為 n 的有序序列為止,這種排序方法就成為 2 路歸併排序

//merge函式將指定的兩個有序陣列(arr1,arr2)合併並且排序

//我們可以找到第三個陣列,然後依次從兩個陣列的開始取資料哪個資料小就先取哪個的,然後刪除掉剛剛取過的資料

function

al_merge

($arra,$arrb)

return array_merge($arrc, $arra, $arrb);

}//歸併排序函式

function

al_merge_sort

($arr)

二分查詢
//二分查詢

//假設資料是按公升序排序的,對於給定值x,從序列的中間位置開始比較,如果當前位置值等於x,則查詢成功;

//若x小於當前位置值,則在數列的前半段中查詢;若x大於當前位置值則在數列的後半段中繼續查詢,直到找到為止

function

binsearch

($tosearch,$arr)

elseif ($arr[$nmiddlenum] < $tosearch) else

}return

false;

}

順序查詢
//順序查詢

function

seqsearch

($arr,$tosearch)

}return -1;

}

選擇排序
//在第一次迴圈中,假設第乙個數是最小的;然後跟第二個數比較,一直比到最後,找出最小值,然後把最小值跟第乙個數的位置互換;

//再進行下一次迴圈,找出最小值跟第二個位置的數互換;一直迴圈陣列的個數減去1次;陣列就成了有序的了

function

selectsort

($arr)}}

return

$arr;

}

外部排序+多路歸併

思路參考:

面試中經常問到一些關於 平行計算 或者 在一台記憶體不多的機器上進行大檔案排序 的問題,這些其實思路都可以借助外部排序+多路歸併去解決:

只能一部分放在放在記憶體陣列中,另一部分放在記憶體之外(硬碟或網路其它節點),這就是所謂的外部排序;

歸併排序:將資料分為左右兩部分,分別排序,再把兩個有序子陣列進行歸併;

重點就是歸併過程,就是兩個已排序好的陣列來比較頭部的元素,取最小值放入最終陣列中;

思路:

第一步:將資料進行切分,例如以100m將1g的檔案分為10組,將每一段資料分配到外部,切分的大小符合節點記憶體大小限制;

第二步:這樣每個節點各自對分配資料進行排序,採用歸併排序或快速排序皆可(多節點則節點處理,單機則逐個處理);

第三步:將每個排序好的節點按照歸併演算法整合到乙個節點(多路歸併);

演算法之php版

列出可能會用到的幾個演算法 desc 列印出乙個菱形 function diamond n for k 0 k 2 i k echo for i n i 0 i for j 0 j n i j for k 0 k 2 i k echo diamond 3 desc 氣泡排序 function bub...

常用演算法(C版)

演算法 algorithm 計算機解題的基本思想方法和步驟。演算法的描述 是對要解決乙個問題或要完成一項任務所採取的方法和步驟的描述,包括需要什麼資料 輸入什麼資料 輸出什麼結果 採用什麼結構 使用什麼語句以及如何安排這些語句等。通常使用自然語言 結構化流程圖 偽 等來描述演算法。一 計數 求和 求...

php常用演算法

二分查詢 陣列裡查詢某個元素 function bin sch array,low,high,k elseif k array mid else return 1 順序查詢 陣列裡查詢某個元素 function seq sch array,n,k if i n else 線性表的刪除 陣列中實現 f...