当前位置: 首页 > article >正文

Java实现归并排序算法

归并排序算法

(1)基本思想:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。

(2)归并排序:是建立在归并操作上的一种有效,稳定的排序算法。

什么是归并操作?

归并操作,也叫归并算法,指的是将两个顺序序列合并成一个顺序序列的方法。
如 设有数列{6,202,100,301,38,8,1}
初始状态:6,202,100,301,38,8,1
第一次归并后:{6,202},{100,301},{8,38},{1},比较次数:3;
第二次归并后:{6,100,202,301},{1,8,38},比较次数:4;
第三次归并后:{1,6,8,38,100,202,301},比较次数:4;
总的比较次数为:3+4+4=11;
逆序数为14;

示例代码:

/**
 * 归并排序
 * @param nums 待排序数组
 * @param l 开始索引:0
 * @param h 最大索引:nums.length - 1
 * @return 排序好的数组
 */
public static int[] mergeSort(int[] nums, int l, int h) {
    if (l == h)
        return new int[]{nums[l]};
 
    int mid = l + (h - l) / 2;
    int[] leftArr = mergeSort(nums, l, mid); //左有序数组
    int[] rightArr = mergeSort(nums, mid + 1, h); //右有序数组
    int[] newNum = new int[leftArr.length + rightArr.length]; //新有序数组
 
    int m = 0, i = 0, j = 0;
    while (i < leftArr.length && j < rightArr.length) {
        newNum[m++] = leftArr[i] <= rightArr[j] ? leftArr[i++] : rightArr[j++];
    }
    while (i < leftArr.length)
        newNum[m++] = leftArr[i++];
    while (j < rightArr.length)
        newNum[m++] = rightArr[j++];
    return newNum;
}

http://www.kler.cn/a/163366.html

相关文章:

  • EDUCODER头哥 基于MVC模式的用户登录
  • [HNCTF 2022 Week1]ret2shellcode-好久不见12
  • 用户裂变数据分析
  • vue3+vite搭建脚手架项目本地运行electron桌面应用
  • YOLOv11融合ICCV[2023]动态蛇形卷积Dynamic模块及相关改进思路|YOLO改进最简教程
  • java---认识异常(详解)
  • 人工智能从 DeepMind 到 ChatGPT ,从 2012 - 2024
  • 数据结构:单链表——定义、插入、删除
  • 《深入理解计算机系统》学习笔记 - 第四课 - 机器级别的程序
  • 谈谈ACID
  • 深度学习之网络优化与正则化
  • zabbix、netdata和glances,做最简单的系统资源监控
  • Linux 环境部署RabbitMQ
  • Qt/C++音视频开发58-逐帧播放/上一帧下一帧/切换播放进度/实时解码
  • 导入自定义模块出现红色波浪线,但是能正常执行
  • 微信机器人接口开发
  • SQL Server 数据库,多表查询
  • 设计模式——七大设计原则
  • 人工智能教程(三):更多有用的 Python 库
  • 12.Mysql 多表数据横向合并和纵向合并
  • 记录 | CUDA编程中用constexpr替代__host____device__
  • 爬虫学习(三)用beautiful 解析html
  • 最简单的基于 FFmpeg 的音频解码器
  • 3D Gaussian Splatting的使用
  • TortoiseGit 下载代码
  • uni-app 微信小程序之好看的ui登录页面(五)