#include <stdio.h>
#include <stdlib.h>
#define MAX 999999  //一个比所传入最大值要大的数即可
void Sort(int* a, int* temp, int low, int high);
void GuiBing(int* a, int* temp, int low, int high);
int main(void)
{int num;int i;scanf("%d", &num);int* temp = (int*)malloc(sizeof(int)*num);int* a = (int*)malloc(sizeof(int)*num);for (i = 0; i <= num - 1; i++) {scanf("%d", &(a[i]));}Sort(a, temp, 0, num-1);for (i = 0; i <= num - 1; i++) {printf("%d ", a[i]);}return 0;
}void Sort(int* a, int* temp, int low, int high)    //Sort可以把传入的数组段排序{int len = high - low + 1;if (len <= 1) {return;}else {Sort(a, temp, low, low + len / 3);Sort(a, temp, low + len / 3 + 1, low + len * 2 / 3);Sort(a, temp, low + len * 2 / 3 + 1, high);GuiBing(a, temp, low, high);return;}}void GuiBing(int* a, int* temp, int low, int high){int m, posi, i, j, len = high - low + 1, k;m = MAX;for (j = 1, k = low; j <= len; j++, k++) {     //把两个子数组归并成一个子数组,存入tempfor (i = low; i <= high; i++) {            //网上多是分别从两个子数组头开始找,但其实没那么复杂,直接不断寻找最小数就行了!if( a[i] < m ) {m = a[i]; posi = i; }}a[posi] = MAX;temp[k] = m;m = MAX;}for (i = low; i <= high; i++) {       //将temp复制到原有的数组aa[i] = temp[i];}}

归并排序-拓展至三路归并相关推荐

  1. 归并排序及其优化(数组归并/链表归并,自顶向下/自底向上等)

      归并排序时一种使用分治思想实现的高效的排序算法,它的最好/最坏/平均时间复杂度都是O(nlogn),而且是一种稳定的排序算法.然而归并排序并没有得到广泛的应用,今天我们来看看归并排序的特点.优化和 ...

  2. 数据结构(八):排序 | 插入排序 | 希尔排序 | 冒泡排序 | 快速排序 | 简单选择排序 | 堆排序 | 归并排序 | 基数排序 | 外部排序 | 败者树 | 置换-选择排序 | 最佳归并树

    文章目录 第八章 排序 一.排序的基本概念 (一)什么是排序 (二)排序的应用 (三)排序算法的评价指标 (四)排序算法的分类 (五)总结 二.插入排序 (一)算法思想 (二)算法实现 (三)算法效率 ...

  3. 三路归并排序(附C++和Java代码)

    三路归并排序(附C++和Java代码) 文章目录 三路归并排序(附C++和Java代码) C++代码: Java代码: PS:阅读此文章需了解归并排序基本原理和二路归并排序 三路归并,即:将待排序数组 ...

  4. 用java实现归并,算法:JAVA实现归并排序

    1.核心思想 归并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法的一个非常典型的应用.将已有序的子序列合并,得到完全有序的序列:即先使每个子序列有序,再使子序列段间有序. 若将两个有序 ...

  5. mysql 的 归并排序_归并与归并排序

    归并排序,同样是利用分治思想的典型算法例子,下面简单总结下归并排序. 一.归并的概念 归并是这样一种概念,它针对两个或者多个有序的数组,是合并这多个有序数组并进行排序的一种手段,它的主要处理方法是每次 ...

  6. [Alg]排序算法之归并排序

    [Alg]排序算法之归并排序 作者:屎壳郎 miaosg01@163.com 日期:Aug 2021 版次:初版 简介: 归并排序是一类在任何情况下都能保证Nlg⁡(N)N\lg(N)Nlg(N)的排 ...

  7. 【外排序】外排序算法(磁盘排序、磁带排序) 外存设备结构分析 败者树多路归并 最佳归并树白话讲解

    外排序 外排序概述 外排序的基本方法是归并排序法 例子 总结 存储设备(可忽略) 磁带 磁带结构 磁盘 硬盘结构 块 硬盘上的数据定位 磁盘排序 磁盘排序过程 1.生成初始顺串 方法1(常规方法): ...

  8. 数据结构---归并排序和外部排序

    内部排序 若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序. 外部排序 若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序. 就地排序 若排序算 ...

  9. mergesort java_归并排序详解(MergeSort)递归和非递归实现

    归并排序的概念及定义 归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序序列. 归并排序是建立 ...

最新文章

  1. (Win7)D盘Program Files文件夹不见了
  2. ArcGIS工具备忘
  3. MW150UH驱动程序Linux,水星MW150UH无线网卡驱动
  4. 13个JavaScript单行式代码
  5. 毕业五年同是程序员为什么差距这么大?他年薪百万,他月薪一万
  6. C++ primer 练习题
  7. 服务器msdtc没有安全显示项,MSDTC 问题疑难解答 - BizTalk Server | Microsoft Docs
  8. 什么是测试用例?什么是测试脚本?两者有什么关系?为什么要编写测试用例?测试用例的作用是什么?
  9. 【美港探案】万物云港股IPO:背靠万科,物业也要搞云?
  10. 复合索引的底层数据结构——最左原则
  11. 《从零开始的RPG游戏制作教程》第一期:制作基础场景
  12. 3月16日—3月20日四年级课程表
  13. 星星之火OIer:C++大纲
  14. 跑跑飞弹室外跑步AR游戏代码方案设计
  15. 深入浅出matplotlib(42):动画显示与MP4视频输出五
  16. 恶意程序利用Linksys路由器漏洞在路由器中传播
  17. 张召忠:第四次工业革命来了》课堂笔记
  18. 粉笔公考——判断推理
  19. MATLAB第一节课基本操作与矩阵输入
  20. 电脑白屏,电脑白屏了按哪个键可以修复?

热门文章

  1. python支持向量机SVM (sklearn)
  2. android客户端直接调用芝麻信用的人脸认证
  3. 一篇文章带你走进测试工程师的世界
  4. 百度云网盘资源高速下载免登录网页版教程分享
  5. 百度网盘网页版视频在线倍速播放
  6. 《算法竞赛入门经典——训练指南》第一章相关内容
  7. spring 启动日志报 DEBUG BeanNameUrlHandlerMapping:86 - Rejected bean name 'org.springframework.web.servl
  8. 2022年Servlect课时十七——什么是监听器@@回顾过滤器@@Servlect
  9. 自学整理之HTML5常用标签和知识——小白篇
  10. 二分法+牛顿迭代法+简化牛顿迭代法+牛顿下山法解方程的近似值