C语言基于递归的归并排序

写归并排序作业时候发现自己对递归有好多遗忘。

现对递归进行以下复习和总结:

  • 归并排序利用的是分治的思想,“分治”即把复杂的问题分成简单的问题进行求解。
  • 总的来说呢:分治是一种求解复杂问题的思想,而递归呢,就为其提供了求解的方法。

先说一下递归:

  1. 简单来说递归就是自己调用自己。递归关系就是实体自己和自己建立关系。
  2. 递归的条件:
    (1)子问题与原问题需一致,且更简单。
    (2)递归必须要有出口,不然就永远出不来了。

接下来我们用归并排序更加深入理解递归:

  • 归并排序大致思想很简单:即先划分,再合并。

每次都一分为二,这样划分什么时候到头呢?

答:这样想,我们最终要得到的是一个排好序的大数组,子问题就是需要得到排好序的一个个小数组,小数组什么时候有序呢,当数组中就只有一个元素时候,则小数组就有序了。这样我们就得到了递归的条件即 low<high.

直接上图:
在这里插入图片描述
其实我当时也是,老师上课讲的思想也都懂,就是有始终不太明白他是怎么合并就有顺序了,这也是我递归遗忘的诟病。
我写的代码MERGE是合并并排序两个小数组的。(后面有代码)
其实了解了递归的步骤后很容易:继续上图:
在这里插入图片描述

代码↓

#include <stdio.h>
#include <stdlib.h>
#define N 1000000


void Mergesort(int *A,int low,int high,int *temp)
{
   
    if(low < high)
    {
   
        int mid = (high+low)/2;
        Mergesort(A
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值