演算法 歸併排序

2022-07-05 17:06:11 字數 1585 閱讀 1255

歸併排序用到了很重要的遞迴思想,下面給大家貼上本人歸併排序的過程和遞迴步驟,幫助大家更好的理解歸併排序

#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 下面採用遞迴排...