一道作业题,网上没找到相关代码,就自己写了一个,比较有意思,经随机数10000规模测试通过。

关键在于合的时候找准“分点”

void Merge(int L, int R, int Mid, int A[], int Tmp[])
{int i, TmpIndex = L, LIndex = L, RIndex = Mid+1;while(LIndex <= Mid && RIndex <= R)Tmp[TmpIndex ++] = A[LIndex] <= A[RIndex] ? A[LIndex ++] : A[RIndex ++];while(LIndex <= Mid)Tmp[TmpIndex ++] = A[LIndex ++];while(RIndex <= R)Tmp[TmpIndex ++] = A[RIndex ++];for(i=L; i<=R; i++)A[i] = Tmp[i];
}void MergeSort(int A[], int N)
{int *Tmp = (int *)malloc( N * sizeof(int) );int i, j, R, Mid;for(i=2; i<N; i <<= 1){for(j=0; j<=N-1; j+=i){Mid = j + (i>>1) - 1;if(j+i-1 > N-1) R = N-1;else R = j+i-1;Merge(j, R, Mid, A, Tmp);}}Merge(0, N-1, (i>>1)-1, A, Tmp);free(Tmp);
}

转载于:https://www.cnblogs.com/cjxa/archive/2010/10/07/1845118.html

非递归分治法排序 MergeSort without recursion相关推荐

  1. 合并排序 非递归 java_合并排序-非递归

    #include //合并排序非递归--自然合并排序 typedef int Type; using namespace std; void Merge(Type c[],Type d[],int l ...

  2. 数据结构与算法学习笔记4:递归+分治法

    数据结构与算法学习笔记4 递归 斐波那契数列 青蛙跳台阶问题 链表倒序打印 分治法 二分查找/折半查找 Binary Search 题目1:快速幂 题目2:如何判断一个数是否为2的次幂 递归 指在函数 ...

  3. 大整数乘法(递归+分治法)

    目录 一.问题描述 二.思路分析 分治法介绍: 问题分析: 三.算法伪代码 四.代码实现效果 五.源代码 六.参考文章 一.问题描述 请设计一个有效的算法,可以进行两个n位大整数的乘法.(n=2^k, ...

  4. java 分治法排序_分治法实现1-N的数字按字典序全排列组合 Java语言

    package 分治法; import java.util.Arrays; /* * 将数字 1 - n进行全排列 按字典序从小到大输出 * 如 1 - 3 * 123 132 213 231 312 ...

  5. python实现冒泡排序算法的非递归版本_python排序算法速度比较:快速排序,归并排序,冒泡排序...

    前言 原理就不在这里说了,好多大神肯定比我这个初学者讲的好很多,推荐去B站看视频讲解,跟着手敲代码 为什么选这三个排序呢? 首先快排是必须掌握的 看看快排在最坏的情况下(O(n²)),且不使用辅助空间 ...

  6. 线性时间选择【递归分治法】

    顾名思义:这篇文章讲解的就是如果用线性时间算法来作出元素选择问题. 问题描述:给定线性序集中n个元素和一个整数k,1<=k<=n.要求找出这n个元素中第k小的元素,即如果将这个n个元素依其 ...

  7. 心得体会:分治法 || 做题也有模板

    二叉树的深度_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/435fb86331474282a3499955f0a41e8b?tpI ...

  8. Codeforces 1408F Two Different 二进制拆分,分治法

    文章目录 题意 题解 题目链接 题意 定义f(a,b)f(a,b)f(a,b)为定义域为正整数对,值域为正整数的任意函数,并且自变量相同的时候保证函数值相同. 给一个长度为nnn的序列aaa,一开始a ...

  9. 常用十大算法 非递归二分查找、分治法、动态规划、贪心算法、回溯算法(骑士周游为例)、KMP、最小生成树算法:Prim、Kruskal、最短路径算法:Dijkstra、Floyd。

    十大算法 学完数据结构该学什么?当然是来巩固算法,下面介绍了十中比较常用的算法,希望能帮到大家. 包括:非递归二分查找.分治法.动态规划.贪心算法.回溯算法(骑士周游为例).KMP.最小生成树算法:P ...

最新文章

  1. shiro之AuthenticationStrategy
  2. python小项目案例-拯救Python新手的几个项目实战
  3. VMware 全虚拟打开
  4. Android记录24-WebView实现白天/夜间阅读模式
  5. linux配置时间同步
  6. Exception raised during rendering: java.lang.System.arraycopy([CI[CII)V
  7. Spring boot - 整合 Redis缓存(上)
  8. Facebook 发布全新 JavaScript 引擎:Hermes! | CSDN博文精选
  9. 电机与拖动基础--第二章第二节
  10. CodecContext->gop_size 是什么
  11. 优秀IT顾问的七大能力之一--专业技术能力
  12. matlab模拟塞曼图谱,C.基于LabVIEW的塞曼效应虚拟仿真-中国高等学校实验物理教学研究会.ppt...
  13. CSO是什么?这家年增长48%的企业级软件公司告诉你
  14. js实现扫雷-算法分析
  15. 宇宙最强,meltdown论文中英文对照版(三)
  16. 查询数据库空间(mysql和oracle)
  17. 防止 Access 数据库被下载的手段。
  18. 【附源码】计算机毕业设计java在线音乐网站设计与实现
  19. TF-IDF算法详解与实践
  20. 独家|喜马拉雅:如何揪出App推广假量?

热门文章

  1. Java通过反射了解集合泛型的本质(Class反射都是在运行时执行的)
  2. Qt工作笔记-Qt5 利用QJson从文件读取Json并解析
  3. MySQL入门之创建、更新、修改、复制、查看表
  4. Android横向滚动卡片,Android实现横向滑动卡片效果
  5. “越级”的两年后,科技潮牌realme与年轻人进行了一次深度对话
  6. python编辑器背景设置为黑色_VScode 配置为Python编辑器
  7. 【C语言笔记初级篇】第三章:函数与递归
  8. 数据结构-线性表之循环队列
  9. c++ winpcap开发(6)
  10. twisted系列教程九–Deferred 的第二个小插曲