全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

java 算法之归并排序详解及实现代码

java 算法之归并排序详解

一、思想

归并排序:将一个数组排序,可以先(递归地)将它分成两半部份分别排序,然后将结果归并起来;  

二、概念

归并:将两个有序的数组归并成一个更大的有序数组;  

三、特点

优点:能够保证将任意长度为N的数组排序所需要的时间和NlogN成正比;

缺点:需要额外的空间和N成正比; 

 四、实现方法

将两个不同的有序数组归并到第三个数组中;

先将前半部分排序,在将后半部分排序,然后在数组中移动元素而不需要使用额外的空间; 

五、代码

/** 
 * 归并排序 
 *  
 * @author pengcx 
 *  
 */  
public class Merge extends Sort {  
  /** 归并所需的辅助数组 */  
  private static Comparable[] aux;  
  
  public static void main(String[] args) {  
    String[] a = { "d", "a", "w", "b", "q" };  
    Merge.sort(a);  
    show(a);  
  }  
  
  public static void sort(Comparable[] a) {  
    aux = new Comparable[a.length];  
    sort(a, 0, a.length - 1);  
  }  
  
  /** 
  * 排序数组的a[lo]至a[hi]元素 
  *  
  * @param a 
  *      数组a 
  * @param lo 
  *      最小元素位置lo 
  * @param hi 
  *      最大元素位置hi 
  */  
  private static void sort(Comparable[] a, int lo, int hi) {  
    if (hi <= lo) {  
      return;  
    }  
  
    // 计算数组中间位置  
    int mid = lo + (hi - lo) / 2;  
    // 排序数组a左边的元素  
    sort(a, lo, mid);  
    // 排序数组a右边的元素  
    sort(a, mid + 1, hi);  
    // 合并数组a左边和右边的元素  
    merge(a, lo, mid, hi);  
  }  
  
  /** 
  * 将数组a的a[lo]至a[mid]的元素与a[mid]至a[hi]的元素合并 
  *  
  * @param a 
  *      合并的数组a 
  * @param lo 
  *      最小数组元素lo 
  * @param mid 
  *      中间元素位置mid 
  * @param hi 
  *      最大元素位置hi 
  */  
  public static void merge(Comparable[] a, int lo, int mid, int hi) {  
    int i = lo, j = mid + 1;  
  
    for (int k = lo; k <= hi; k++) {  
      aux[k] = a[k];  
    }  
  
    for (int k = lo; k <= hi; k++) {  
      // 如果左边的元素用尽,取右边的元素  
      if (i > mid) {  
        a[k] = aux[j++];  
      }  
      // 如果右边的元素用尽,取左边的元素  
      else if (j > hi) {  
        a[k] = aux[i++];  
      }  
      // 如果右半边的当前元素小于左半边的当前元素,取右半边元素  
      else if (less(aux[j], aux[i])) {  
        a[k] = aux[j++];  
      }  
      // 如果右半边的当前元素大于等于左半边的当前元素,取左半边元素  
      else {  
        a[k] = aux[i++];  
      }  
    }  
  }  
}  

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# java  # 归并排序  # 归并排序详解  # 归并排序实例  # java二路归并排序示例分享  # java实现归并排序算法  # Java经典排序算法之归并排序详解  # Java 归并排序算法、堆排序算法实例详解  # java 中归并排序算法详解  # Java分治归并排序算法实例详解  # java 排序算法之归并排序  # Java算法之归并排序举例详解  # 递归  # 成正比  # 更大  # 所需  # 而不  # 希望能  # 将它  # 谢谢大家  # 所需要  # 先将  # 中移动  # 组中  # 长度为  # 后半部  # 前半  # strong  # class  # pengcx  # author  # brush 


相关文章: 合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  建站之星导航如何优化提升用户体验?  如何零基础开发自助建站系统?完整教程解析  英语简历制作免费网站推荐,如何将简历翻译成英文?  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  动图在线制作网站有哪些,滑动动图图集怎么做?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  如何快速查询网址的建站时间与历史轨迹?  专业公司网站制作公司,用什么语言做企业网站比较好?  定制建站哪家更专业可靠?推荐榜单揭晓  如何通过西部数码建站助手快速创建专业网站?  如何通过西部建站助手安装IIS服务器?  全景视频制作网站有哪些,全景图怎么做成网页?  如何在阿里云香港服务器快速搭建网站?  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  宝塔面板如何快速创建新站点?  制作网页的网站有哪些,电脑上怎么做网页?  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  如何用wdcp快速搭建高效网站?  宁波免费建站如何选择可靠模板与平台?  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  如何通过wdcp面板快速创建网站?  高防服务器租用如何选择配置与防御等级?  建站VPS能否同时实现高效与安全翻墙?  油猴 教程,油猴搜脚本为什么会网页无法显示?  昆明高端网站制作公司,昆明公租房申请网上登录入口?  再谈Python中的字符串与字符编码(推荐)  如何在景安云服务器上绑定域名并配置虚拟主机?  如何在服务器上三步完成建站并提升流量?  云南网站制作公司有哪些,云南最好的招聘网站是哪个?  建站主机选购指南:核心配置与性价比推荐解析  黑客如何利用漏洞与弱口令入侵网站服务器?  公司门户网站制作流程,华为官网怎么做?  活动邀请函制作网站有哪些,活动邀请函文案?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  广州美橙建站如何快速搭建多端合一网站?  如何通过商城免费建站系统源码自定义网站主题?  如何做静态网页,sublimetext3.0制作静态网页?  表情包在线制作网站免费,表情包怎么弄?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  如何使用Golang table-driven基准测试_多组数据测量函数效率  seo网站制作优化,网站SEO优化步骤有哪些?  视频网站制作教程,怎么样制作优酷网的小视频?  北京建设网站制作公司,北京古代建筑博物馆预约官网?  无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?  建站之星安装后如何配置SEO及设计样式?  做企业网站制作流程,企业网站制作基本流程有哪些?  h5在线制作网站电脑版下载,h5网页制作软件? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。