归并排序MergeSort

MergeSort归并排序算法的实现 MergeSort归并排序算法通过分割和合并操作,将待排序数组逐步划分为更小的子数组,并对子数组进行排序,最终将排好序的子数组归并成一个完全有序的数组。归并排序是一种经典的排序算法,它的核心思想是将待排序的数组分成两个子数组,分别进行排序,然后将已经排序好的子数组合并成一个有序数组。以上代码实现了MergeSort归并排序算法,在排序前打印出原始数组,在排序后打印出排序后的数组。归并排序的时间复杂度为O(nlogn),其中n为待排序数组的长度。它是一种稳定的排序算法,适用于各种数据规模的排序任务。 阅读详情
#include <stdio.h>

/*归并排序会使用额外空间,空间大小于数组a相当,空间复杂度为O(n)
 * 最好,最坏,平均时间复杂度都为O(nlogn)*/

void Merge(int *a, int low, int mid, int high, int *b) {
    int p1 = low;//指向前半部分待插入的元素
    int p2 = mid + 1;//指向后半部分待插入的元素
    int cur = p1;//cur为b数组当前需要更新的位置
    while (p1 < mid + 1 && p2 < high + 1) {//元素全部插入b
        if (a[p1] < a[p2]) {
            b[cur] = a[p1];
            p1++;
        } else {
            b[cur] = a[p2];
            p2++;
        }
        cur++;
    }
    //再将剩下的元素放入,可能会出现剩下好几个元素的情况,如35,65,0,故应用while将元素全部放入
    while(p1<mid+1){
        b[cur++]=a[p1++];
    }
    while(p2<high+1){
        b[cur++]=a[p2++];
    }

   
    //对a数组进行更新
    for (int i = 0; i < high + 1; ++i) {
        a[i] = b[i];
    }
}

void MergeSort(int *a, int low, int high, int *b) {
    if (high > low) {
        int mid = (low + high) / 2;
        MergeSort(a, low, mid, b);
        MergeSort(a, mid + 1, high, b);
        Merge(a, low, mid, high, b);
    }
}


int main() {
    int a[13] = {49, 24, 11, 223, 44, 55, 675, 321, 1, 23, 44, 56, 221};
    int b[13] = {0};//辅助空间
    MergeSort(a, 0, sizeof a / sizeof a[0] - 1, b);
    printf("after Merge sort\n");
    for (int i = 0; i < sizeof a / sizeof(a[0]); ++i) {
        printf("%-4d", a[i]);
    }

    return 0;
}

PHP:MergeSort归并排序(附完整源码) 阅读详情

相关推荐

JavaScript实现MergeSort归并排序算法(附完整源码)

JavaScript实现MergeSort归并排序算法(附完整源码)Comparator.js完整源代码Sort.js完整源代码MergeSort.js完整源代码 Comparator.js完整源代码 export default class Comparator { constructor(compareFunction) { this.compare = compareFunction || Comparator.defaultCompareFunction; } static de

希望我的博客,能帮上你解决学习中工作中所遇到的问题 593

Algorithm MergeSort归并排序

Reference: 归并排序_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili 其实有时候算法真正实现出来了再去看,也没当初自己觉得的那么难。 讲解用的C++,底下有用C实现了一下,其实没差。 具体的内容看顶部的视频,讲的很细。 归并排序名字已经说明了内涵,归指递归,将问题的规模缩小到只有一个元素时去解决,并指合并,将小的数组有序交叉合并,最后就能得到排序好的数组。 同样地,其实现也是分两步,...

A land whole of flowers. 353

python:实现mergeSort归并排序(附完整源码)

python:实现mergeSort归并排序(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 242

c语言mergesort 参数,求教关于归并排序MergeSort()的问题

已结贴√问题点数:20回复次数:1 求教关于归并排序MergeSort()的问题#include#includevoid InputArray(float *p,int n);void C_MergeSort(float *p1,int low,int middle,int high,float *p2);void MergeSort(float *p1,int low,int high,fl...

weixin_40004960的博客 207

使用Kettle进行数据同步(增量)

文章目录kettle介绍kettle安装kettle使用使用kettle同步关系型数据库数据(MySQL示例)1. 创建一个转换2. 选择表输入3. 格式转换4. 执行脚本5. 创建job使用kettle同步NoSql数据(MongoDB示例)创建转换时的注意事项MongoDBInput怎么创建job的创建如何在Linux上面运行已经创建好的job?1、把创建好的job传输到Linux机器上面2、编辑kjb文件3、执行任务 kettle介绍 Kettle 是一款国外开源的 ETL 工具,纯 Java 编写

JenKin的博客 7351

Cadence17.4 Allegro PCB制板(gerber / 光绘)文件输出的顺序及注意点

Cadence Allegro PCB制板文件输出 (gerber 光绘文件输出)

weixin_45331044的博客 1万+

归并排序 MergeSort的解析和java实现

归并排序 mergeSort 的解析和java实现 mergeSort是稳定的O(nlogn)的排序算法,但是相比起其他的排序算法来说需要额外O(n)的空间。 归并排序的主体思想就是把一整个数组不断的对半拆分,直到每一个子数组中都只有两个元素。然后对这两个元素进行排序。在对最小的子数组进行排序之后,进行合并,把两个子数组中最小的一个放到新数组的头部然后指针向后移。 class MergeSort{ public static void mergeSort(int[] arr){ int[] copy

Dh0le的博客 430

Android 面试题 Handler篇

1.Handler的实现原理。

ViewHandKownHealth的博客 955

javascript版归并排序mergeSort

为什么80%的码农都做不了架构师?>>> ...

weixin_34365635的博客 111

蓝牙耳机充电仓——功能框架

数据传输:大部分充电仓会跟耳机通信,控制耳机开机、关机和进入可搜索模式等等。蓝牙耳机给大家的生活带来便利,来讲讲TWS蓝牙耳机的搭档充电仓吧!方便携带:如果耳机单独带着,指定能弄丢一个,有了充电仓就安全多了。收纳保护:把珍爱的耳机放入充电仓里,防止丢失、磕碰、刮花等。给耳机充电:提供电力补给,让耳机持续使用。

改变自己现在能改变的,珍惜自己现在所拥有的 8949

小论文/大论文必备 | YOLO多模态目标检测、绘制曲线对比图 | 引入多种绘制曲线对比图,包括mAP0.5,mAP0.5:0.95,Loss损失变化的曲线对比

本文通过可视化方法分析YOLO多模态模型的训练过程,对比不同实验的检测精度和损失函数变化。主要内容包括:1)绘制mAP@0.5和mAP@0.5:0.95曲线评估检测精度;2)分析边界框回归损失(box_loss)、分类损失(cls_loss)和分布式损失(dfl_loss)的收敛趋势;3)提供完整的Python代码实现,支持多实验对比,可生成高清曲线图。该方法能直观展示模型训练效果,便于优化策略评估和参数调优。

Ai缝合怪、助力小伙伴高效发论文 261

归并排序 mergesort

#include <iostream> #include <vector> #include <stdlib.h> #include <chrono> #include <cmath> #include <algorithm> template <typename T> inline void swap(T * t1, T * t2) { T tmp = *t1; *t1 = *t2; *t2 ..

u014789533的博客 1万+

【OpenFOAM】-olaFlow-算例6- waveFloatingObject

波浪作用下的浮体的刚体运动,属于流固耦合(FSI)问题

ou_no的博客 3539

归并排序怎么写,看这里( MergeSort 和 _MergeSort )

//归并排序是将两个已经排好序的数列,以某一种顺序整合在一起的排序算法 //前提是要有两个已经排好序的数列! //_MergeSort是MergeSort函数的一个子函数,通过不断地分治到单独的数上 //来为归并算法提供前提,使要归并的两个数列有序 //通过_MergeSort函数反复的递归调用来实现将一个无序的数列排好序 //tmp开辟出来的空间的作用是: //将排好序的数列放到tmp开辟的空间中,然后再将tmp空间里的数列放到原数组中 //实现了一个替换的作用 void _Me

zjybp的博客 653

51单片机 驱动有源/无源蜂鸣器+Proteus仿真

51单片机 驱动有源/无源蜂鸣器+Proteus仿真 相关篇《51单片机 Proteus仿真有源蜂鸣器始终不响原因及解决方法》 电路搭建 采用NPN管驱动有源蜂鸣器电路 采用PNP管驱动有源蜂鸣器电路 采用PNP管驱动无源蜂鸣器 采用NPN管驱动无源蜂鸣器 Proteus元器件列表 实例代码 /************************************************************************************* * 实验现象:下载程序

perseverance51博客 2万+

SAP 系统间信任关系配置全攻略:从 SM59 到 SMT1 的实践与风险控制

本文介绍了在SAP系统间配置信任关系的详细流程与最佳实践。文章以SAP Gateway与后端系统架构为场景,从SM59创建RFC目的地开始,到SMT1建立信任关系,再到授权对象S_RFCACL的配置,提供了完整的操作指南。重点包括:使用标准命名规范创建专用RFC连接、通过向导完成系统间信任登记、严格控制S_RFCACL授权范围等。文中还分享了真实项目案例、可复用的检查清单以及常见问题的排查思路,帮助用户实现稳定可靠的跨系统无密码调用,同时确保安全性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 323

Java 归并排序(MergeSort)算法实现

Java 归并排序(MergeSort)算法实现public class MergeSort { public static void merge(int [] A,int p,int q,int r){ //复制数组 int n = r-p+1; int [] R = A.clone(); int i = p;

软货成熊之路 658

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

MergeSort归并排序

MergeSort归并排序@(算法) 本节介绍MergeSort,归并排序是基于分治思想的,即divide-and-conquer 递归的将一个数组元素不断二分,等到实在不能分为止,开始对小数组排序,并将两个小数组merge成更大的已排序数组,直到原数组排好序为止。 MergeSort算法的时间复杂度为O(NlogN)O(NlogN)先上MergeSort的代码,对算法的思路有个大致的了解:p

tengyuan93的博客 422

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

什么是归并排序 mergeSort

归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法: 自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第 2 种方法); 自下而上的迭代; 在《数据结构与算法 JavaScript 描述》中,作者给出了自下而上的迭代方法。但是对于递归法,作者却认为: However, it is not possible to do so

_ 2896

C:C的排序算法:归并排序(MergeSort)

#include&lt;stdio.h&gt; typedef struct Array { int key; }Array; #define LENGTH 8 void Merge(Array A[],int low,int mid,int high); void MergeSort(Array A[],int low , int high); int main(void) { int ar...

Chnyac的博客 586

归并排序(Mergesort)

归并排序是基于分治策略的一种排序算法。 归并排序 基本思想是:将待排序的元素分成大小大致相同的两个子集合,分别对两个字集合进行排序,最终将排好序的子集合序列合并成要求的排好序集合。 合并算法可递归描述如下: template<class Type> void MergeSort(Type a[], int left, int right){ if(left < rig...

weixin_43873373的博客 1307

通过归并排序算法(mergesort)理解递归在程序中的运行过程

递归的重要性不言而喻,它是很多算法实现的基础,比如含有分治思想的算法(归并排序,二分查找),有关遍历二叉树的算法,或者求解数学递推式的算法(斐波那契数列,n的阶乘),回溯法,动态规划等等, 一提到递归总有点发蒙,理论上比较好理解,但是一遇到复杂一点的递归算法,在大脑中很难想象递归在计算机中是怎么实现的。跟着一步步debug才终于搞明白,所以在这里先把过程给记录下来。 归并排序算法...

fgao2的博客 1594

[算法之归并排序] MergeSort

 // 将a[p...r] 和a[r+1...q] 合并到 b[0...q-p]void Merge2Sort(int *a, int *b, int p, int r, int q){ int i = p, j = r+1, k = 0; while(ir && jq){  if(a[i]  a[j])   b[k++] = a[i++];  else   b[k++] = a[j++]

942
上一篇: 堆排序HeapSort
下一篇: 408 2016 43
丶qn
博客等级 码龄6年 1粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值