归并排序递归实现迭代实现
//递归代码实现归并排序
#include<iostream>
#include"stdio.h"
using namespace std;
#define MAXSIZE 10
void Mering(int * p1, int p1_size, int *p2, int p2_size)
{int i=0, j=0, k=0, m;//其中i,j是p1,p2的指针int temp[MAXSIZE];while (i<p1_size&&j<p2_size){ if (p1[i] < p2[j]){temp[k++] = p1[i++];}else{temp[k++] = p2[j++];}}while (i<p1_size){temp[k++] = p1[i++];}while (j<p2_size){temp[k++] = p2[j++];}for (m = 0; m < (p1_size + p2_size); m++){p1[m] = temp[m];}
}void MergeSort(int k[], int n)
{if (n > 1){int *p1 = k;int p1_size = n / 2;int *p2 = k + n / 2;int p2_size = n - (n / 2);MergeSort(p1,p1_size);//分解MergeSort(p2, p2_size);//分解Mering(p1, p1_size, p2, p2_size);//合并}}int main()
{int a[10] = {5,2,6,0,3,9,1,7,4,8};int i;MergeSort(a,10);printf("排序后的结果是:");for (i = 0; i < 10; i++){printf("%d", a[i]);}printf("\n");return 0;
}
//迭代代码实现归并排序(还有点小问题,未能调试成功)
#include<iostream>
#include"stdio.h"
using namespace std;
#define MAXSIZE 10void MergeSort(int k[], int n)
{int i, left_min, left_max, right_min, right_max;int next;int *temp = (int*)malloc(n*sizeof(int));for (i = 1; i < n; i *= 2){for (left_min = 0; left_min < n - i; left_min = right_max){right_min = left_max = left_min + 1;right_max = left_max + 1;if (right_max>n){right_max = n;}next = 0;while (left_min < left_max && right_min < right_max){if (k[left_min] < k[right_min]){temp[next++] = k[left_min++];}else{temp[next++] = k[right_min++];}}while (left_min < left_max){k[--right_max] = k[--left_max];}while (next>0){k[--right_min] = temp[--next];}}}}
int main()
{int a[10] = { 5, 2, 6, 0, 3, 9, 1, 7, 4, 8 };int i;MergeSort(a, 10);printf("排序后的结果是:");for (i = 0; i < 10; i++){printf("%d", a[i]);}printf("\n");return 0;
}
归并排序递归实现迭代实现相关推荐
- java 归并排序 非递归_归并排序-递归及非递归的JAVA实现
归并排序介绍 平均时间复杂度: O(NLogN) 最好情况时间复杂度: O(NLogN) 最差情况时间复杂度: O(NLogN) 所需要额外空间: 递归:O(N + LogN), 非递归:O(N) 稳 ...
- 递归、迭代、分治、回溯、动态规划、贪心算法
今天就简单来谈谈这几者之间的关联和区别 递归 一句话,我认为递归的本质就是将原问题拆分成具有相同性质的子问题. 递归的特点: 1.子问题拆分方程式,比如:f(n) = f(n-1) * n 2.终止条 ...
- 一起学DNS系列(十)图、例详解DNS递归和迭代查询原理及过程 (1)
上节中提到了一些有关递归查询的内容,但说的很少,也很笼统,本节将会从原理和实例两方面入手分析DNS的递归以及迭代查询. 在此之前,我们需要了解一些背景知识,以便于更好的理解今天的主题内容. 在互联网中 ...
- LeetCode 589. N-ary Tree Preorder Traversal-多子节点树前序遍历--递归,迭代--反向压栈--C++解法
LeetCode 589. N-ary Tree Preorder Traversal-多子节点树前序遍历–递归,迭代–反向压栈–C++解法 LeetCode题解专栏:LeetCode题解 LeetC ...
- 利用递归、迭代解决斐波那契数列问题与汉诺塔难题
有人说,"普通程序员使用迭代,天才程序员使用递归",真是这样吗? 1.浅谈递归与迭代 <1>递归的基本概念: 程序调用自身的编程技巧称为递归,是函数自己调用自己. 一个 ...
- linux关闭dns迭代查询,DNS查询和响应过程递归和迭代的使用
需要了解DNS查询过程的递归和迭代的机制,找到了RFC的相关章节, 对这个进行了简单的翻译(水平有限),可以留下来做个参考. RFC 1034 4.3.1. Queries and responses ...
- 递归和迭代_迭代与递归
很多编程小白都会遇到'迭代'和'递归'的问题(包括我自己),大部分同学还是不知道迭代与递归的区别.下面我就尝试用最通俗易懂的模式讲解递归与迭代的区别. 1.迭代: 迭代其实很简单,我们在编程中经常用到 ...
- C语言反转二叉树的递归和迭代解决方案(附完整源码)
C语言反转二叉树的递归和迭代解决方案 C语言反转二叉树的递归和迭代解决方案完整源码(定义,实现,main函数测试) C语言反转二叉树的递归和迭代解决方案完整源码(定义,实现,main函数测试) #in ...
- 树形结构:从二分查找,二叉搜索树寻找最近祖先,从递归到迭代,实现技巧总结
二分查找,二叉搜索树寻找最近祖先均是典型分治问题,把原问题分成三部分考虑,递归实现简单,迭代实现也比较简单,里面蕴含了一些从从递归到迭代的技巧,注意这里没有使用模拟栈技术. 深究其原因是,这一类型的递 ...
- LeetCode--144,94,145,102 二叉树的前序、中序、后序、层序遍历(递归,迭代,栈,队列)
二叉树的前序.中序.后序.层序遍历(递归,迭代,栈,队列) 1. 二叉树的前序遍历 1.1 题目描述 1.2 题目分析 1.3 Python实现 2. 二叉树的中序遍历 2.1 题目描述 2.2 题目 ...
最新文章
- gzip、bzip2和tar
- Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名、合并两个不同路径下图片文件名等目录/路径案例、正确加载图片路径)之详细攻略
- 技能模块的防外挂机制和同步机制优化
- 魅族显示无法连接到服务器,魅族连接电脑无法识别怎么办_魅族手机usb无法连接电脑的解决方法...
- 月入1万的工作,招不到人,怎么办?
- HDU1863 畅通工程【Kruskal算法+并查集】
- 【多元统计分析】01.多元统计的基础
- 最新Oreo支付系统平台完整源码+已全开源
- 取整函数 --- 以Python为例
- python 笔记之“海龟”画图 演示画小猪佩奇,机器猫
- 阳历时间转换为农历时间
- 数据库系统--期末复习
- rpm搭建LAMP+Discuz论坛
- 洛谷 T2691 桶哥的问题——送桶
- 李白打酒 c语言,C语言递归调用1:李白打酒
- 传输层协议TCP—滑动窗口(6)
- 网络安全之路:我的系统性渗透测试学习框架
- Linux文件写入读取与关闭(二)
- Java和go加密,解密,Base64失败
- 【计算机视觉处理5】阈值处理
热门文章
- Atitit postgresql data type 数据类型与mysql对应表 数据库常用数据类型 	Postgre	Mysql	 整数	intgreter	Int	 小数	numeric	FL
- Atitit 建立新组织集团模型的框架基本制度与一些原则
- Atitit html5.1 新特性attilax总结
- Atitit Atitit 零食erp数据管理---世界著名零食系列数据.docx世界著名零食
- Atitit 图像处理知识点 知识体系 知识图谱
- python: Requests库的一些高级特性
- 投行巨头金融科技战略——摩根士丹利财富管理转型之路篇
- Rust: codewars 的Duplicate Encoder
- (转)智能投顾只能这么搞!美国证监会发15页指南
- Julia : string =Int,Float