演算法之 歸併排序演算法

2021-12-29 20:41:13 字數 948 閱讀 5349

歸併排序是效率還是比較高的演算法。其中的分治法是常用的一種解決問題的方法,現在流行的雲計算其實就是一種分治法的應用。

所謂的分治法,字面解釋就是「分而治之」,就是把乙個複雜的問題分成兩個或更多的相同或相似的子問題,直到最後子問題可以簡單的直接求解,原問題的解即子問題的解的合併。這個思想在實際工作中的作用非常大,特別是處理大資料和做複雜運算的時候。

歸併排序的基礎是歸併操作merge,即將兩個有序陣列合併為乙個有序陣列。

歸併排序的演算法思路為:

第一次掃瞄陣列,將陣列中相鄰的兩個元素merge為有序陣列

第二次掃瞄,將相鄰的有序陣列再合併為更大的乙個有序陣列

再進行n次掃瞄,不斷合併陣列,直到排序完成

其中的歸併操作merge的思路是:

設定兩個指標,最初位置分別為兩個已經排序序列的起始位置

比較兩個指標所指向的元素,選擇相對小的元素放入到合併空間,並移動指標到下一位置

重複步驟3直到某一指標達到序列尾

將另一串行剩下的所有元素直接複製到合併序列尾

好了我們按照上面的思路來用php實現歸併排序演算法:

<?php //歸併排序演算法

//首先定義歸併操作merge函式

function merge($arr1,$arr2)

$arr3=array_merge($arr3,$arr1,$arr2);

return $arr3;

}//歸併排序

function merge_sort($newarray)

$arr = array(9,8,7,6,5,8,7);

print_r( merge_sort($arr));

越來越發現遞迴演算法的重要性,熟練應用遞迴可以解決很多實際的問題。

關於遞迴的理論可以參考

演算法之歸併排序

歸併排序 void mergearray int a,int temp,int left,int mid,int right else while i1 mid while i2 right for int i 0 i k i 上面 為合併a left,mid 和a mid 1,right 的 因為...

演算法之歸併排序

歸併排序是分治法 divide and conquer 的經典案例。分治模式在每一層遞迴上都有三個步驟 分解 divide 將原問題分解成一系列子問題 解決 conquer 遞迴地解各子問題。若子問題足夠小,則直接求解 合併 combine 將子問題的結果合併成原問題的解。歸併排序 merge so...

排序演算法之歸併排序

歸併排序也是經典的使用分治法思想的代表演算法之一。歸併排序的效率很高,而且是一種穩定的排序。其總體的思想思路就是將待排序的元素分成大致相同的兩個子集合,分別對兩個子集合進行排序,最終將排序的子集合合併成排好序的總集合 歸併排序c 實現如下 include void mergesort int arr...