演算法介紹:採用分治的思想,即將大問題轉換為小問題,但是它們的前提一定要一樣,否則就是兩個問題了。歸併排序即對乙個序列進行一分為二,然後對兩個子串行再進行一分為二,直到子列只有乙個數,則返回,通過不斷將子串行兩兩歸併,最後將整個大序列歸併排好序。
因為我採取歸併的方式,所以可以想象原來乙個待排序的序列,先一分為二,但是這兩個序列中不止乙個元素,所以我們要繼續一分為二,…直到一分為二後的序列只有乙個元素,這時候我們可能已經向下遞迴很多層啦,接下來如果子串行只有乙個元素我們就預設為有序的啦(也沒得和別的數字排呀!),然後這時候我們就可以返回上一級序列了(即有兩個元素的子串行),然後對這個子串行進行歸併(過程見**),然後又上一級歸併,…通過不斷的歸併,我們最後就能達到歸併最初一分為二的兩個序列啦!歸併完這兩個序列就大功告成~
//
// main.c
// 作業4
//// created by yizhihenpidehou on 2020/3/17.
//#include
#define maxen 30
void
merge
(int arr,
int l,
int r)
while
(x1<=mid)
while
(x2<=r)
for(
int j=
0;j<
(r-l+1)
;j++)}
void
merge_sort
(int arr,
int l,
int r)
int mid=
(l+r)/2
;merge_sort
(arr, l, mid)
;merge_sort
(arr,mid+
1, r)
;merge
(arr,l,r);}
intmain
(void);
merge_sort
(num,1,
8);for
(int i=
1;i<=
8;i++
)return0;
}
歸併排序 二分
歸併排序就是將陣列反覆拆分成兩部分,然後分別在這兩部分裡面再反覆拆分,講拆分成的兩部分按順序排好之後再歸併起來,歸併起來之後再反覆交換位置,最終使整個陣列按順序排列。具體操作方法 按從小到大排 拆分成的兩部分依次比較,若前半部分的較小,將其存入陣列tmp中,將前面的下標i 若後面一部分較小,則將後面...
二分歸併排序
對n個不同的數構成的陣列a 1 n 進行排序,其中n 2 k。二分歸併排序對待排序陣列先劃分後歸併,以陣列49,38,65,97,76,13,27,57為例,在二分歸併中,需要進行如下順序 劃分將原問題歸結為規模為n 2的2個子問題 繼續劃分,將原問題歸結為規模為n 4的4個子問題。繼續 當子問題規...
二分歸併排序
1.問題 二分歸併排序 對n個不同的數構成的陣列a 1 n 進行排序,其中n 2 k 2.解析 1 對於一組資料a n 申請臨時空間,temp n 用於臨時存放資料,劃分為兩個序列 2 設定兩個指標分別指向兩個序列的首部,其中中間資料mid start end 2劃分到前乙個序列當中 3 比較兩個指...