摘要:
这次自己写了一下 总结起来就是: 归并排序递归和非递归形式是逆过程。 两者有的地方是一样的,不一样的地方是: 递归是递归拆分成一小段一小段的排序,同时是把A拆成A1 A2,先把A1整个排好,再排A2,最后达到排好整个A的目的。 非递归是序列从左往右先按等分的长度(i)逐个排好,长度不够i的在末尾,于是对它排一次序,然后让i两倍递增。#include <stdio.h>#include <string.h>#include <stdlib.h>#define MAX 1000#define OK 1#define ERROR 0using namespace 阅读全文
摘要:
来源 : http://www.cnblogs.com/liushang0419/archive/2011/09/19/2181476.html归并排序的确是分治思想的经典代表。写了很多次,这次又有新的收获,过去用的是递归的实现方式,理论上任何用递归方法实现的代码都可以转换为非递归的形式,所以此例也不例外。然后再用非递归的实现方法上进行改进,完成了“自然归并”算法,这比直接归并效率要高一些。先给出基础的用递归方法实现的归并排序:View Code 其中归并函数中的合并方法没有单独写开,单独函数merge()及其解释如下:void merge(int fir,int end,int mid){ 阅读全文