归并排序

本文采用Java书写选择排序,其他语言类似可以借鉴着写
  • 思想1(正着想):将一个大的无序数组有序,我们可以把大的数组等分成两个,然后对这两个数组分别进行排序,之后在把这两个数组合并成一个有序的数组。
  • 思想2(反着想):待排序的n个元素,可以看作n个待合并的有序序列,每个序列只有一个元素。每次将两个相邻的序列合并为一个大的有序序列,重复合并过程直到剩下一个序列。两种其实核心思想是一样的只是理解不同。
  • 效果图:可以借助动图来理解归并排序
  • 效果图2:

算法的复杂度和稳定性

  • 稳定性:归并排序值相等时不交换,因此具有稳定性
  • 复杂度:可借助master公式(不清楚master公式可以点击查看)进行计算:T(N) = 2 * T(N/2) + O(N)
    时间复杂度为:O(NlogN)
    空间复杂度为:O(N)

代码实现

package Sort;/*** @Description:* @ProjectNmae: gitTest* @PackageName: Sort* @ClassName: MergeSort* @Author: Y-peak* @Date: 2021.08.27 22:48   星期五*/public class MergeSort {public static void mergeSort(int[] arr){if(arr == null || arr.length < 2){return;}process(arr,0, arr.length-1);}public static void process(int[] arr, int L,int R){if(L == R){return;}int mid = L + ((R-L) >> 1);process(arr, L, mid);process(arr, mid + 1, R);merge(arr, L, mid, R);}public static void merge(int[] arr, int L, int M, int R){int[] help = new int[R-L+1];int i = 0;int p1 = L;int p2 = M + 1;while (p1 <= M && p2 <= R){help[i++] = arr[p1] <= arr[p2] ? arr[p1++] : arr[p2++];}while (p1 <= M){help[i++] = arr[p1++];}while (p2 <= R){help[i++] = arr[p2++];}for(i = 0; i < help.length; i++){arr[L+i] = help[i];}}public static void main(String[] args) {int[] arr = new int[]{9,8,7,6,5,4,3,2,1};mergeSort(arr);for(int i:arr){System.out.println(i);}}
}

十大排序算法之归并排序相关推荐

  1. 数据结构与算法:十大排序算法之归并排序

    数据结构与算法:十大排序算法之归并排序 package TopTenSortingAlgorithms;/*** 归并排序:Java** @author skywang* @date 2014/03/ ...

  2. 归并排序执行次数_十大排序算法,看这篇就够了

    排序算法分类[1][2] 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序. 非比较类排序:不通过比较来决定元素间的相对次序,它可以 ...

  3. 这或许是东半球分析十大排序算法最好的一篇文章

    作者 | 不该相遇在秋天 转载自五分钟学算法(ID:CXYxiaowu) 前言 本文全长 14237 字,配有 70 张图片和动画,和你一起一步步看懂排序算法的运行过程. 预计阅读时间 47 分钟,强 ...

  4. 「干货总结」程序员必知必会的十大排序算法

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 绪论 身 ...

  5. 「归纳|总结」程序员必知必会的十大排序算法

    微信搜一搜「bigsai」关注这个有趣的程序员 新人原创公众号,求支持一下!你的点赞三连肯定对我至关重要! 文章已收录在 我的Github bigsai-algorithm 欢迎star 本文目录 绪 ...

  6. 经典十大排序算法(含升序降序,基数排序含负数排序)【Java版完整代码】【建议收藏系列】

    经典十大排序算法[Java版完整代码] 写在前面的话 十大排序算法对比 冒泡排序 快速排序 直接选择排序 堆排序 归并排序 插入排序 希尔排序 计数排序 桶排序 基数排序 完整测试类 写在前面的话   ...

  7. 十大排序算法(Java)

    文章目录 十大排序算法(Java) 一.冒泡排序(Bubble Sort) 二.选择排序(Selection Sort) 三.堆排序(Heap Sort) 四.插入排序(Insertion Sort) ...

  8. 中希尔排序例题代码_【数据结构与算法】这或许是东半球分析十大排序算法最好的一篇文章...

    码农有道 历史文章目录(请戳我) 关于码农有道(请戳我) 前言 本文全长 14237 字,配有 70 张图片和动画,和你一起一步步看懂排序算法的运行过程. 预计阅读时间 47 分钟,强烈建议先收藏然后 ...

  9. 排序算法——十大排序算法的图示与实现

    十大排序算法概览 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序. 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于 ...

最新文章

  1. Java并发编程题库
  2. cv2.putText
  3. 分布式系列四: HTTP及HTTPS协议
  4. android 进程
  5. 《从零开始学Swift》学习笔记(Day 30)——选择类还是结构体呢?
  6. ascii码表的使用
  7. 计算机专业关于Java读书笔记_《Java8学习笔记》读书笔记(四)
  8. 英语演讲常用连接词和句子
  9. 无人驾驶汽车激光雷达用胶的三大要求
  10. Azure AKS、ACR访问
  11. 下列python保留字中不用于表示分支结构_【单选题】下列Python保留字中,不用于表示分支结构的是...
  12. 坚守 5 年后 「一个人的消防队」终成历史
  13. SCI论文及期刊查询
  14. ESP8266墨水屏
  15. solidworks的安装以及下载教程 (下载连接在文章最后)
  16. 读《巴比伦富翁》有感
  17. 半导体PVD和CVD设备用质量流量控制器市场现状研究分析
  18. 如何成为邮件营销“标题党”?
  19. Not allowed to load local resource: file:///,浏览器禁止访问浏览器图片,文件解决方法
  20. 照相机数据恢复软件使用办法

热门文章

  1. 关于MultipleOutputFormat若干小记
  2. 《DB 查询分析器》中断SQL语句的执行
  3. 大连.Net俱乐部已经加入INETA
  4. 怎样用java写一个简单的文件复制程序
  5. 2修改字段名_DevExpress ASP.NET v18.2新功能详解(二)
  6. [网络安全自学篇] 十三.Wireshark抓包原理(ARP劫持、MAC泛洪)及数据流追踪和图像抓取(二)
  7. [Python图像处理] 五.图像融合、加法运算及图像类型转换
  8. 带你搞明白什么是缓存穿透、缓存击穿、缓存雪崩
  9. 树莓派做一个聊天机器人
  10. CCS5.5环境下使用clock()函数测试程序段运行时间