歸併排序用到了很重要的遞迴思想,下面給大家貼上本人歸併排序的過程和遞迴步驟,幫助大家更好的理解歸併排序
#define _crt_secure_no_warnings#include #include #include int temp[20] = ;
int merge(int source,int l, int mid_index ,int r)
int i = l;
int j = mid_index + 1;
int k = l;
while (i <= mid_index && j <= r)
while (i <= mid_index)
while (j <= r)
printf("\n之後的temp\n");
for (int i = l; i <=r; i++)//這一步是至關重要的,很多初學歸併排序的同學忽略了這一步,以為最後列印temp就行了
printf("\n");
}int merge_process(int source , int l, int r)
}int main()
; int len;
len = sizeof(source) / sizeof(int);
merge_process(source, 0, len -1 );
}
下面是解析過程,能看懂執行過程是g1->g2->g3->g4->g3->g2->g5->g2.....問題就不大了
g5:3 4 mid = 3 merge_progress(, ,3,3) merge_progress(, ,4,4) merge(334) temp(30,60,80,20,40)
g4:0 1 mid = 0 merge_progress(, ,0,0) merge_progress(, ,1,1) ,merge(001) temp(30,80)
g3:0 2 mid = 1 merge_progress(, ,0,1) g4 merge_progress(, ,2,2),merge(012) temp(30,60,80)
g2:0 4 mid = 2 merge_progress(, ,0,2) g3 merge_progress(, ,3,4) g5, merge(024)temp()
g1:0 7 mid= 4 merge_progress(, ,0,4) g2
首先執行g1,到merge_progress(, ,0,4)跳到g2
g2執行到merge_progress(, ,0,2)跳到g3
g3執行到 merge_progress(, ,0,1)跳到g4
g4執行到merge_progress(, ,0,0) 因為l==r,返回繼續執行merge_progress(, ,1,1),同理返回執行
merge(001),得出temp(30,80)同時把temp排好序的值賦給source,返回g3
g3繼續執行merge_progress(, ,2,2),因為l==r,返回執行merge(012),得出 temp(30,60,80),同時把temp排好序的值賦給source,返回g2,繼續執行剩下的函式,依次歸併
歸併演算法 歸併排序
歸併演算法 歸併排序 這周需要用到歸併演算法,於是找了找相關的資料,整理如下 歸併排序 merge sort 是利用 歸併 技術來進行排序。歸併是指將若干個已排序的子檔案合併成乙個有序的檔案。兩路歸併演算法 1 演算法基本思路 設兩個有序的子檔案 相當於輸入堆 放在同一向量中相鄰的位置上 r low...
歸併排序演算法
include stdafx.h include include include 合併兩段已經排好序的列表 void merge int list int mergelist int left int mid int right else if i mid else 將列表list按照seglen分...
歸併排序演算法
這個演算法感覺比插入難理解一些,下面說說我的理解 歸併排序的步驟 1.把長度為n的序列分為兩個長度為n 2的子串行 2.對這兩個子串行分別採用歸併排序 3.將兩個子串行合併成乙個最終的排序序列 通過步驟2可看到 在歸併排序中又用了歸併排序,可見這是乙個遞迴的過程。例如乙個陣列 a 8 下面採用遞迴排...