5 4 遞迴演算法(附 歸併排序)

2021-10-13 19:30:06 字數 1016 閱讀 2724

若乙個演算法通過把問題歸約到帶更小輸入的相同問題的例項來解決原來的問題,則這個演算法稱為遞迴的。

簡單來所就是,將輸入減小,比如下面這個階乘的例子,求n!的值:

function

factorial($n

)return$n*

factorial($n

-1);

}

在上面的函式中,同乙個函式,輸入不斷減小。

先說什麼是歸併排序,就是先將陣列拆分成更小的陣列,然後真對這些小陣列進行排序,排序後組合成已經排好序的陣列。

示意圖

源**

<?php 

function

mergesort

($line

)$middle

=ceil

(count

($line)/

2);return

sortfunction

(mergesort

(array_slice

($line,0

,$middle))

,mergesort

(array_slice

($line

,$middle))

);}function

sortfunction

($array1

,$array2

)$line=[

8,2,

4,6,

9,7,

10,1,

5,3]

;print_r

(mergesort

($line))

;

輸出結果

歸併排序 遞迴演算法

陣列排序任務可以如下完成 1 將前一半排好序 2 將後一半排好序 3 把兩半歸併到乙個新的有序陣列中,然後再拷貝回原來的陣列,排序完成 利用遞迴思想將陣列一直劃分為要排序的另一半,最後就回將問題化簡為相鄰兩個數的排序,然後將排好序的陣列歸併到乙個陣列中,然後繼續向上遞迴直至排序完成。int a 10...

歸併排序演算法 遞迴法

首先乙個問題,如何將兩個整數進行公升序排序?這不簡單嗎。將兩個數比較,再將小的放在前面,大的放在後面。然後如何將兩個公升序的陣列排序為乙個陣列呢?我知道我知道 建立第三個陣列,將需要那兩個陣列按下標順序進行比較,然後將小的數放入第三個陣列中,在將兩者下標加一。如,將a陣列與b陣列的第乙個元素比較,假...

歸併排序(遞迴 非遞迴 自然歸併排序)

演算法思想 歸併排序是分治法的典型應用,其思想是不斷地將兩個有序的陣列合併為乙個有序陣列。遞迴實現 include void merge int a,int left,int m,int right void mergesortaux int a,int left,int right void me...