我的编程空间,编程开发者的网络收藏夹
学习永远不晚

利用Java编写一个归并排序算法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

利用Java编写一个归并排序算法

利用Java编写一个归并排序算法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

一、归并排序

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

归并过程为:比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到r[k]中,并令i和k分别加上1;否则将第二个有序表中的元素a[j]复制到r[k]中,并令j和k分别加上1,如此循环下去,直到其中一个有序表取完,然后再将另一个有序表中剩余的元素复制到r中从下标k到下标t的单元。归并排序的算法我们通常用递归实现,先把待排序区间[s,t]以中点二分,接着把左边子区间排序,再把右边子区间排序,最后把左区间和右区间用一次归并操作合并成有序的区间[s,t]。

二、归并操作

利用Java编写一个归并排序算法

三、两路归并算法

1、算法基本思路

     设两个有序的子文件(相当于输入堆)放在同一向量中相邻的位置上:R[low..m],R[m+1..high],先将它们合并到一个局部的暂存向量R1(相当于输出堆)中,待合并完成后将R1复制回R[low..high]中。

(1)合并过程

     合并过程中,设置i,j和p三个指针,其初值分别指向这三个记录区的起始位置。合并时依次比较R[i]和R[j]的关键字,取关键字较小的记录复制到R1[p]中,然后将被复制记录的指针i或j加1,以及指向复制位置的指针p加1。
     重复这一过程直至两个输入的子文件有一个已全部复制完毕(不妨称其为空),此时将另一非空的子文件中剩余记录依次复制到R1中即可。

(2)动态申请R1

     实现时,R1是动态申请的,因为申请的空间可能很大,故须加入申请空间是否成功的处理。

2、归并算法

void Merge(SeqList R,int low,int m,int high)  {//将两个有序的子文件R[low..m)和R[m+1..high]归并成一个有序的  //子文件R[low..high]  int i=low,j=m+1,p=0; //置初始值  RecType *R1; //R1是局部向量,若p定义为此类型指针速度更快  R1=(ReeType *)malloc((high-low+1)*sizeof(RecType));  if(! R1) //申请空间失败  Error("Insufficient memory available!");  while(i<=m&&j<=high) //两子文件非空时取其小者输出到R1[p]上  R1[p++]=(R[i].key<=R[j].key)&#63;R[i++]:R[j++];  while(i<=m) //若第1个子文件非空,则复制剩余记录到R1中  R1[p++]=R[i++];  while(j<=high) //若第2个子文件非空,则复制剩余记录到R1中  R1[p++]=R[j++];  for(p=0,i=low;i<=high;p++,i++)  R[i]=R1[p];//归并完成后将结果复制回R[low..high]  } //Merge 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

利用Java编写一个归并排序算法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

利用Java编写一个归并排序算法

利用Java编写一个归并排序算法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、归并排序归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(D
2023-05-31

利用java 怎么实现一个归并排序算法

本篇文章给大家分享的是有关利用java 怎么实现一个归并排序算法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 归并排序算法,顾名思义,是一种先分再合的算法,其算法思想是将要排
2023-05-31

使用Java编写一个插入排序算法

使用Java编写一个插入排序算法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、算法原理插入排序法:所谓插入排序法乃是将一个数目插入该占据的位置。假设我们输入
2023-05-31

如何在Java与Python实现一个归并排序算法

如何在Java与Python实现一个归并排序算法?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。归并排序里运用到算法里很重要的一个思想——分治法:将原问题分解为几个规模较小但
2023-05-31

Java 归并排序算法、堆排序算法实例详解

基本思想:  归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。归并排序示例:合并方法:设r[i…n]由两个有序子表r[i…m
2023-05-31

Java排序算法之归并排序简单实现

算法描述:对于给定的一组记录,首先将每两个相邻的长度为1的子序列进行归并,得到 n/2(向上取整)个长度为2或1的有序子序列,再将其两两归并,反复执行此过程,直到得到一个有序序列。package sorting;/** * 归并排序 * 平
2023-05-30

java怎么实现归并排序算法

归并排序算法的实现步骤如下:1. 首先,实现一个归并操作函数。该函数将两个已排序的数组合并为一个新的已排序的数组。例如:```javapublic static void merge(int[] arr, int left, int mid
2023-08-15

Java 语言实现归并排序算法

【引言】 归并排序算法是一种高效且稳定的排序算法。它采用分治法的思想,将数组反复分割成两个子数组,直到每个子数组只有一个元素。然后将这些子数组逐个合并,最终得到排序完毕的数组。本文将使用Java语言实现归并排序算法,并详细讲解其核心思想和代
2023-08-30

如何利用java实现归并排序

什么是归并排序?归并排序是利用递归与分治的技术将数据序列划分为越来越小的半子表,再对半子表排序,最后再用递归方法将排好序的半子表合并成越来越大的有序序列。核心思想将两个有序的数列合并成一个大的有序的序列。通过递归,层层合并,即为归并。(推荐教程:java快速入
如何利用java实现归并排序
2018-05-27

使用Java怎么编写一个递归程序

这篇文章将为大家详细讲解有关使用Java怎么编写一个递归程序,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。递归的定义递归(recursion):以此类推是递归的基本思想,将规模大的问题转化为
2023-06-06

利用Java如何实现一个冒泡排序算法

利用Java如何实现一个冒泡排序算法?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比
2023-05-31

利用java怎么实现一个冒泡排序算法

利用java怎么实现一个冒泡排序算法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。java 算法之冒泡排序的实现代码:package cn.songxinqia
2023-05-31

怎么利用Java实现一个希尔排序算法

这期内容当中小编将会给大家带来有关怎么利用Java实现一个希尔排序算法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java 实现希尔排序Java代码 /*希尔排序(Shell Sort)是插入排序的一种
2023-05-31

怎么在java 项目中使用归并排序算法

怎么在java 项目中使用归并排序算法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。归并排序 归并排序,指的是将两个已经排序的序列合并成一个序列的操
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录