//归并排序->先使子序列有序,再使子序列段间有序
//时间复杂度都是nlogn 空间复杂度是O(n)#include <iostream>
#include <vector>
using namespace std;void print(vector<int>& nums){for(auto a: nums){cout<<a<<" ";}cout<<endl;
}//nums:待排序数组,temp:用于排序的临时数组,begin:排序区间的首元素位置,end:排序区间尾元素位置
void mergeSortCore(vector<int>& nums,vector<int>& temp,int begin,int end){if(begin>=end) return;int mid=begin+(end-begin)/2;//计算排序区间中间位置int start1=begin,end1=mid;//左区间int start2=mid+1,end2=end;//右区间mergeSortCore(nums,temp,start1,end1);//对左区间排序mergeSortCore(nums,temp,start2,end2);//对右区间排序int index=begin;//temp数组下标位置//把左右已经排序好的子数组合并while(start1<=end1&&start2<=end2){temp[index++]=nums[start1]>nums[start2]? nums[start2++]:nums[start1++];}//右边子数组合并完,追加合并左数组while(start1<=end1){temp[index++]=nums[start1++];}//左边子数组合并完,追加合并右数组while(start2<=end2){temp[index++]=nums[start2++];}//将临时数组中的值复制到原数组*****for(index=begin;index<=end;index++){nums[index]=temp[index];}}
void mergeSort(vector<int>&nums){vector<int> temp(nums);mergeSortCore(nums,temp,0,nums.size()-1);///一定注意减一,因为是左闭右闭区间
}int main(){vector<int> nums{1,24,67,23,4,78,90,456};mergeSort(nums);print(nums);return 0;
}

归并排序(C++版)相关推荐

  1. 归并排序算法 C++实现与时间复杂度(考过)恋上数据结构笔记

    复习梗概 画图,自己整个数组,看代码写步骤,这个对理解归并排序还是很有必要的 合并两个有序数组的merge函数写法 时间复杂度的分析方法!!! 其实我觉得去b站找个动态的步骤分解视频也是不错的复习方法 ...

  2. C++实现归并排序(附完整源码)

    C++实现归并排序 归并排序 迭代版 递归版 归并排序 是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合 ...

  3. java arrays.sort() c_正面刚算法-Java中Arrays.sort()(一)

    最近一直在看关于排序相关的算法,从O(n²)的冒泡.插入.选择到O(nlog(n))的归并.快排.再到桶排序.计数排序.基数排序.各个算法都有自己的优点和缺点,那么jdk中关于这种底层的算法是怎么实现 ...

  4. 合并两个无序数组java_Java实现十大排序算法(上)

    概念 概念解释稳定如果a原本在b前面,而a=b,排序之后a仍然在b的前面.不稳定如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面.时间复杂度对排序数据的总的操作次数,反映当n变化 ...

  5. 2021字节跳动校招秋招算法面试真题解题报告--leetcode148 排序链表,内含7种语言答案

    148.排序链表 1.题目描述 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序 2.解题报告 针对nlogn的排序算法,主要有快速排序,归并排序和堆排序.其中,堆排序利用了数 ...

  6. 【内排序 -- 八大排序】

    目录: 前言 算法实现 (一)插入排序 1.直接插入排序 2.希尔排序(缩小增量排序) (二)选择排序 1.选择排序 2.堆排序 (三)交换排序 冒泡排序 快速排序1(hoare版) 快速排序2(挖坑 ...

  7. 排序算法-全!!-详细代码

    文章目录 总的 1. 冒泡排序 2. 插入排序 3. 希尔排序 4. 堆排序 前四种代码 5. 归并排序 6. 快速排序 7. 基数排序 代码全部在最下面 我放到一起了 注释比较详细 每一个都有对应的 ...

  8. 堆排序稳定性举例_最常用的 8 个排序算法:从原理到改进,再到代码兑现透彻解析...

    1. 关于排序 很高兴与大家一起探讨计算机科学中的基础算法之排序算法.排序算法是非常基础同时又应用非常广泛的算法,无论在工作还是在生活中,比如: 数据库脚本,如MSSql, MySql, NoSql ...

  9. 归并排序详解,Java版描述。

    为了简单起见,使用int类型数组讲述归并算法,后面扩展到其他类型的排序. 目录 1.2 排序思想 1.3 见名知意 1.4 抽象过程 1.5 实例操作 1.6 代码实现(JAVA版本) 1.6.1调用 ...

最新文章

  1. html的input不可编辑状态,HTML中让表单input不可编辑的方法
  2. 为什么传值时加号变成了空格_URL的参数中有加号传值变为空格的问题(URL特殊字符)...
  3. 前端学习(1877)vue之电商管理系统电商系统之头部布局
  4. 错误提示:'……' is not assignable to Android.app.Activity Manifest XML
  5. python判断、创建文件夹
  6. LG WP7机型工程模式下越狱
  7. jQuery EasyUI API 中文文档 - 数值微调器(NumberSpinner)
  8. edui 富文本编辑_ueditor集成秀米编辑器
  9. adb 驱动 fastboot 驱动 win10
  10. 如何比较两个EXCEL 文件的不同(各个EXCEL版本的方法)
  11. Flash 原版官网下载
  12. 软件测试笔记——如何测试一个矿泉水瓶?
  13. cv2.VideoCapture.get()用法
  14. 傻瓜式抠图工具,不用photoshop也能搞定抠图!
  15. MIMO雷达波形设计
  16. 计算机三维设计论文摘要,三维动画论文摘要
  17. 使用jib-maven-plugin分层构建Docker镜像——避免直接使用FatJar
  18. HTML5系列代码:个人页面
  19. 人人玩棋牌电玩城全套源码搭建下载教程
  20. [TYVJ1827]『Citric II』一道防AK好题

热门文章

  1. TP5与TP3.X对比
  2. C/C++网络编程中的TCP保活
  3. c# ini file
  4. 漫谈移动开发中的组件化
  5. 【11_83】Remove Duplicates from Sorted List
  6. javascript设计模式--javascript的数据类型
  7. [当人工智能遇上安全] 6.基于机器学习的入侵检测和攻击识别——以KDD CUP99数据集为例
  8. Python之字典类型数据常见操作及排序
  9. Swift之深入解析协议Protocol的底层原理
  10. Swift之实现表格UITableView数据首字母顺序排列展示并添加“索引”快速定位查找功能