merge-sort-call-tree-graph

merge-sort-call-tree-graph

实现归并排序的递归调用图

最近为了给一个学归并排序的同学搞懂递归调用的过程,在纸上画了整个递归调用的流程,及其每次调用传递的参数以及执行后的相应结果.
感觉非常适合教学使用,随用js自动画了个图,方便大家学习.

程序划分

虽然这个程序是js写成的,但是由于教学对象是学C的,所以贴的代码仍然是C的.
我们把归并排序的过程分为5步,在下面的注释中可以看到.

void merge(int a[], int first, int mid, int last, int temp[])  
{  
    int i = first, j = mid + 1;  
    int m = mid,   n = last;  
    int k = 0;  

    while (i <= m && j <= n)  
    {  
        if (a[i] <= a[j])  
            temp[k++] = a[i++];  
        else  
            temp[k++] = a[j++];  
    }  

    while (i <= m)  
        temp[k++] = a[i++];  

    while (j <= n)  
        temp[k++] = a[j++];  

    for (i = 0; i < k; i++)  
        a[first + i] = temp[i];  
}  
void sort(int a[], int first, int last, int temp[])  
{  
    if (first < last)  return; //step1

        int mid = (first + last) / 2 //step2;  
        sort(a, first, mid, temp);    //step3  
        sort(a, mid + 1, last, temp); //step4 
        merge(a, first, mid, last, temp); //step5  

}

示列

归并排序递归调用图

截图

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值