首先乙個問題,如何將兩個整數進行公升序排序?
這不簡單嗎。將兩個數比較,再將小的放在前面,大的放在後面。
然後如何將兩個公升序的陣列排序為乙個陣列呢?
我知道我知道!建立第三個陣列,將需要那兩個陣列按下標順序進行比較,然後將小的數放入第三個陣列中,在將兩者下標加一。
如,將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 在程式首部新增基...