歸併排序是效率還是比較高的演算法。其中的分治法是常用的一種解決問題的方法,現在流行的雲計算其實就是一種分治法的應用。
所謂的分治法,字面解釋就是「分而治之」,就是把乙個複雜的問題分成兩個或更多的相同或相似的子問題,直到最後子問題可以簡單的直接求解,原問題的解即子問題的解的合併。這個思想在實際工作中的作用非常大,特別是處理大資料和做複雜運算的時候。
歸併排序的基礎是歸併操作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...