归并排序的一种c++实现

C++如何实现的归并排序算法 归并排序的算法我们通常用递归实现,先把待排序区间[first, last]以中点二分,接着把左边子区间排序,再把右边子区间排序,最后把左区间和右区间用一次归并操作合并成有序的区间[first,last]。1、比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到temp[k]中,并令i和k分别加上1;本文主要介绍了C++实现的归并排序算法,结合实例形式详细分析了归并排序算法的原理、实现步骤、操作技巧与使用方法,需要的朋友可以参考下。赋值操作的次数是(2nlogn)。 阅读详情

1. 归并排序介绍

    归并排序的原则是分治法,里面有递归和合并的概念,时间复杂度是O(nlgn)。

2. 归并排序的实现

#include <iostream>
#include <vector>

using namespace std;

void inputNumbers(vector<int> &arrays){
    cout<<"Please input numbers:";
    int num;
    while(cin>>num){
        arrays.push_back(num);
    }
    cout<<endl;
}

void mergeSortImpl(vector<int>&arrays, int begin, int end);
void mergeSort(vector<int> &arrays){
   mergeSortImpl(arrays, 0, arrays.size()-1); 
}

void outputNumbers(const vector<int> &arrays){
    cout<<"The sorted nubers: ";
    for(vector<int>::const_iterator iter=arrays.begin(); iter!=arrays.end(); ++iter)
        cout<<*iter<<" ";

    cout<<endl;
}

void mergeTwo(vector<int> &arrays, int begin, int middle, int end){
    int array1[middle - begin + 1];
    int array2[end - middle];
    
    int index=0;
    for(int i=begin; i!=(middle+1); ++i)
        array1[index++] = arrays[i];

    index = 0;
    for(int i=middle+1; i!=end+1; ++i)
        array2[index++] = arrays[i];

    int i = 0;
    int j = 0;
    int k = begin;
    while(i!=middle-begin+1 && j!=end-middle){
        arrays[k] = array1[i]<array2[j]?array1[i++]:array2[j++];
        ++k;
    }
    
    while(i!=middle-begin+1)
        arrays[k++] = array1[i++];
    
    while(j!=end-middle)
        arrays[k++] = array2[j++];
}

void mergeSortImpl(vector<int>&arrays, int begin, int end){
   if(begin < end){
        int middle = (begin + end)/2;
        mergeSortImpl(arrays, begin, middle);
        mergeSortImpl(arrays, middle+1, end);
        mergeTwo(arrays, begin, middle, end);
    } 
}

int main(){
    vector<int> arrays; 

    //input numbers
    inputNumbers(arrays);

    //mergesort
    mergeSort(arrays);

    //output numbers 
    outputNumbers(arrays);

    return 0;
}


3. 测试

    Please input numbers:12 34 56 11 22 33 689 321
    The sorted nubers: 11 12 22 33 34 56 321 689 
C++归并排序 今天我们学习了排序中又快又稳定的算法:归并排序,时间复杂度为 O(nlogn)。代码很简洁,很容易懂。 阅读详情

相关推荐

【数据结构】:归并排序(c++实现)

一、归并排序的定义 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 二、归并排序的原理 第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列; 第二步:设定两个指针,最初位置分别为两个已经排序序列的起...

hello__的博客 1634

算法导论 分治法+归并排序的一种排序算法 C++实现

#include<iostream> #include <time.h> using namespace std; void merge(int*A, int p, int q, int r) { int i = 0; int index1 = 0; int index2 = 0; int length1 = q - p ...

weixin_33825683的博客 208

归并排序(基于C++的递归实现)

#include<iostream> using namespace std; void show(int Array[], int n){ int i; for (i = 0; i < n; i++){ cout << Array[i] << " "; } cout << endl; } void merge(int Arra...

ph の BLOG 398

归并排序C++算法实现

定义:归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 简单的来说,归并排序主要分为三步,一是对数组的划分,二是对数组的排序,三是对数组的合并。划分的大小是可以随自...

Eggy个蛋 2万+

C++模板归并排序

C++模板实现归并排序

上善若水 1260

C++排序算法:归并排序详解

C++排序算法:归并排序详解

小天狼星_布莱克 的博客 3万+

C++归并排序算法深度解析

归并排序算法是一种高效的排序算法,具有稳定的性能和良好的实际应用效果。通过本文的介绍,相信您已经掌握了归并排序算法的原理和C++代码实现。在实际应用中,可以根据具体情况选择合适的优化策略,以提高算法的性能。😄😄😄。

m0_66371692的博客 1515

微信h5 支付,已经获得weixin://wap/pay?prepayid,但是无法调起微信客户端支付

结果几个接口,最终获得到到一直包含调起微信客户端的支付链接 但是直接打开这个页面,却不能调起微信客户端支付,原因是,在打开新页面的时候,需要设置a.rel = "noreferrer"; <body> <a href="javascript:void(0)" onclick="openNewWindowNoreferrer(this)">点击支付</a&...

qq_31683775的博客 4万+

归并排序原理及C++源码实现

一、原理 建立在归并操作上的一种有效、稳定的算法,采用分治法,先使每个子序列有序,然后将以有序的子序列合并,得到完全有序的序列。若将两个有序表合成一个有序表,成为二路归并。 排序思想,一分为二,二分为四,四分为八,直到划分到最细;然后逐渐合并回去。分的时候采用递归的方式进行。 二、思路 先把原始序列进行分组,划分为多个子序列,对每个子序列进行排序,然后子序列之间再两两合并排序得到新的有序序列作为下一次合并的子序,然后再把新子序列合并….如此循环最后得到一个有序的序列。 实例: 对数据[1, 4, 2,.

locahuang的博客 373

数据库迁移策略实战:MySQL到PostgreSQL

数据库迁移是一项复杂且细致的任务,需要充分的准备工作、合适的迁移策略和严格的验证与优化步骤。通过选择合适的迁移工具、进行手动迁移和应用程序适配、以及迁移后的验证与优化,可以确保数据迁移的成功和业务的连续性。希望本文的分享能够为大家在MySQL到PostgreSQL的数据库迁移实战中提供一些有用的参考和启示。

shejizuopin的博客 1732

基于stm32f407VGT6控制WS2812的TIM1+PWM+DMA实现方式

项目中使用到了ws2812灯带,作为产品的外观显示灯,经过开发之后,整理一下,仅供大家参考。 WS2812B是一个集控制电路与发光电路于一体的智能外控LED光源。 其外型与一个5050 LED灯珠相同, 每个元件即为一个像素点。 像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路, 还包含有高精度的内部振荡器和可编程定电流控制部分, 有效保证了像素点光的颜色高度一致。数据协议采用单线归零码的通讯方式, 像素点在上电复位以后, DIN端接受从控制器传输过来的数据, 首先送过来的24bit数据被第一个像素

weixin_43608153的博客 9214

[排序算法]C++实现归并排序

基本思想   归并排序是将两个或两个以上的有序表组合成一个新的有序表。   假设初始序列有n个记录,则可看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到⌈n2⌉⌈n2⌉\lceil \frac {n} {2}\rceil个长度为2或1的有序子序列;再两两归并,……,如此重复,直至得到一个长度为n的有序序列为止,这种排序方法称为2-路归并排序。 实现快速排序的步骤 递...

0123 's blog 1259

华为OD机试双机位C卷-魔法收积木 (C/C++/Py/Java/Js/Go)

华为OD机试(机考)双机位C卷 【魔法收积木】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为od - 魔法收积木。

qq_45776114的博客 1941

Sort排序专题(7)归并排序(MergeSort)(C++实现)

归并排序(MergeSort) 归并排序(Merge Sort):是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 思想:将数组分解直到每个分组只有一个元素,在进行两两归并,得到有序序列,在将有序序列进行两两归并然后直到最终的合并得到有序序列。 图解如下: ①先将总序列一分为二,再将各个子序列一分为二,直到每个分组只有一个元素10,4,6,

Your_boy_的博客 504

2、硬件工程师笔试面试汇总(2025版本)

本文摘要:文章系统梳理了硬件工程师笔试面试中的电子元器件知识要点,涵盖电阻、电容、电感、二极管、三极管、MOS管等器件的工作原理、选型要点和应用场景。详细解析了UART、I2C、SPI等通信协议的特点及实现方式,并探讨了电源管理、信号处理、PCB设计等核心问题。针对常见电路如放大电路、滤波电路、逻辑电路等提供了深入分析,同时介绍了示波器使用、单片机系统设计等实用技能。文章还包含器件封装、电平转换、时序分析等工程实践内容,并附有相关真题解析和仿真实验指导,为硬件工程师提供全面的技术参考。

XU157303764的博客 9011

cursor AI代码编辑器IDE对接deepseek模型api;字节ai编辑器trae

参考: https://www.cursor.com/ https://platform.deepseek.com/https://www.cursor.com/下载安装后,注册账号登录即可 再高级里选择设置 再模型这注册模型: 模型名称一定要填正确,url地址填好,最后填上秘钥验证

weixin_42357472的博客 1万+

C++实现归并排序法

本节内容Jungle用C++实现实现归并排序法。在百度百科里,对归并算法是如下说明的: 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。 由此可看出,归并排序分为两个步骤:排序每个子序列,合并两个有序数列。其...

冯Jungle的个人博客 1421

边缘AI工业落地:YOLO26-Seg + RK3588 NPU 极致部署(低功耗+实时实例分割,工业场景全覆盖)

本次实战汇总了「YOLO26-Seg+RK3588 NPU」工业边缘部署中最常见、最致命的8个坑点,所有坑点均来自真实工业项目,解决方案均为零代码/一键操作,无需复杂配置,能让你少走90%的弯路,节省大量时间,必看必记!❌ RKNN转换报错「算子不支持/模型加载失败」→ ✅ 导出ONNX时必须指定opset=12,重新导出即可,RK3588唯一兼容版本;❌ 分割mask错位/轮廓模糊 → ✅ 导出ONNX时加,并保证RKNN的归一化参数与YOLO26一致,零代码修复;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1718

归并排序(C++实现、递归、非递归)

(本博客旨在个人总结回顾) 1.概括 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序是一种稳定的排序方法。 2.实现 C++递归和非...

qq_23903863的博客 1421

二、FM1288调试方案-工具软件使用

分析音频数据的软件需要满足以下几点:1、能打开原始pcm音频文件;2、基本的音频播放软件的操作;3、能查看分析音频数据的频率成分;4、能查看分析音频音量幅度;5、能完成基本音频处理:降噪、音量增幅限幅、滤波和均衡;

优快云mianfeixiazai001的博客 1294

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

归并排序C++实现——基于数组的

归并排序C++实现——基于数组的 /关于归并排序理论知识网上应该也很详细了,我在这里就分享一下自己的代码实现,有错误的地方欢迎大家指出/#include <iostream> //能不用using namespace std 就尽量不用; using std::cout; using std::endl; using std::cin;//high is the index of array /

ke1950523491的博客 2159

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

归并排序C++实现

学习心得: 其实递归是分治法的天然实现,这点从归并排序上体现得算是淋漓尽致。看看下面这张图里的伪码,思考一下执行过程就会体会到前面这句话。在if满足的时候其实什么实质性的步骤都没有执行,只不过在不停的divide。在if条件满足以后逐层往上调用merge函数进行conquer和combine。 #include <iostream> using namespace std; void merge(int arr[], int ll, int m, int r) { i...

Damon_X的博客 294

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

排序算法之归并排序

归并排序和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是O(n log n)的时间复杂度。代价是需要额外的内存空间。

9288

C++简单的归并排序

归并排序 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 ·····················································...

千苏的博客 621
上一篇: 实现任意两个整数的加法
下一篇: windows7 配置php开发环境
xiaohuan_study
博客等级 码龄15年 9粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值