算法复习-归并排序(递归实现)

一.在实现归并排序之前首先了解递归过程:

       递归过程简单来说就是在函数中自己调用自己。但是,在函数体中一定需要一个结束过程,对应函数体最不停调用自己的过程中何时终止。总的来说,递归的过程一般是缩小问题规模,靠近结束过程。在递归的过程中,会利用栈结构。每次函数执行过程中调用新的函数都会保存运行现场(包括局部变量和当前代码行等等),最外层的函数调用最早被压入栈中,也就是栈底,而最晚被调用的也就最早弹出,然后依次回调。

 

首先了解归并排序的基本过程:

    归并排序将整个数列分解为多个子数列,将各个子数列在合并的过程中进行排序。e.g 现有数列{9,8,7,10,0,2,1,4}。

    1.首先将数列分为左右两个子数列{9,8,7,10}和{0,2,1,4}

     2.左子数列继续分解为{9,8}和{7,10},同时右子数列也分解为{0,2}和{1,4}。

     3.{9,8}继续分解为{9},{8},其余数列同样。

     4.{9}和{8}都都仅包含单个数,无需排列。

     5.合并{9}和{8},8<9,所以合并后为{8,9},同时{7}和{10},也合并为{7,10},({0,2},{1,4}也是如此)。

     6.{8,9}和{7,10}开始合并。现有指针left指向8,right指针指向7,和temp数组。比较8和7,7<8,所以temp[0]=7,right指针右移,指向10。

     7.比较8和10,8<10,所以temp[1]=8,left指针右移,指向9。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值