歸併排序演算法 遞迴法

2021-10-13 12:44:14 字數 1231 閱讀 4303

首先乙個問題,如何將兩個整數進行公升序排序?

這不簡單嗎。將兩個數比較,再將小的放在前面,大的放在後面。

然後如何將兩個公升序的陣列排序為乙個陣列呢?

我知道我知道!建立第三個陣列,將需要那兩個陣列按下標順序進行比較,然後將小的數放入第三個陣列中,在將兩者下標加一。

如,將a陣列與b陣列的第乙個元素比較,假如a小,就將a第乙個元素存入temp第乙個位中中,然後a與team下標加一

不錯,那比較完多出來的元素呢?

直接接到temp後面就可以了

是這樣的,那麼如何將乙個陣列用剛剛的方法進行公升序呢?

我們知道,這個方法是兩個單獨的數進行比較。

於是便可以知道,我們要做的第一步便是將陣列轉化為乙個乙個的數,然後再將

兩個單獨的數

進行比較排序,變成

兩個有順序的陣列

再通過上面的方法,將兩個有順序的陣列變成乙個有順序的陣列

依次直到最終變為乙個有順序的陣列,這便是歸併排序的遞迴法

以下是**:

#include

#define max_size 15

void

merging

(int

*list1,

int*list2,

int list1_size,

int list2_size)

//陣列排序

else

}while

(iwhile

(jfor(m=

0; m<

(list1_size+list2_size)

; m++)}

void

mergesort

(int list,

int len)

//陣列拆分

}int

main

(void);

mergesort

(list,10)

;printf

("排序後的結果是");

for(i=

0; i<

10; i++

)return0;

}

歸併排序(合併排序) 遞迴法

參考了一些大佬的 再自己總結了一下。原理基本不變。歸併排序 合併排序 是一種分治演算法。這個演算法不斷地將乙個陣列分為兩部分,分別對左子陣列和右子陣列排序,然後將兩個陣列合併為新的有序陣列。穩定 是 時間複雜度 最優 o nlog n 最差 o nlog n 平均 o nlog n include ...

歸併排序 遞迴演算法

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

歸併排序的實現及其優化(遞迴法)

歸併排序 一 思路 遞迴 list a,b,c,d 1 遞迴過程 1 陣列一分為2,list1 a,b list2 c,d 2 先確立遞迴項 分別對list1 list2做歸併排序,此時可以假設左右子陣列已經有序。3 執行merge子過程,將list1 list2合併並使之有序。3 在程式首部新增基...