排序算法之归并排序

原创 2018年04月14日 22:49:40
归并排序,时间复杂度为O(nlogn)空间复杂度,需要 O(n) 额外空间

public class MergeSortBlog {
public void merge(int[] a,int first,int mid,int last,int[] temp) {
int i=first,j=mid+1;
int m=mid,n=last;
int k=0;
while(i<=m&&j<=n) {
if(a[i]<=a[j]) {
temp[k++]=a[i++];
}else {
temp[k++]=a[j++];
}
}
while(i<=m) {
temp[k++]=a[i++];
}
while(j<=n) {
temp[k++]=a[j++];
}
for( i=0;i<k;i++) {
a[first+i]=temp[i];
}
}
public void mergeSort(int[] a,int first,int last,int[] temp) {
if(first<last) {
int mid=(first+last)/2;
mergeSort(a,first,mid,temp);
mergeSort(a,mid+1,last,temp);
merge(a,first,mid,last,temp);
}
}


public static void main(String[] args) {
int[] a= {0 ,5,3,1,4,6};
int temp[]=new int[6];
MergeSortBlog mergeSortBlog=new MergeSortBlog();
mergeSortBlog.mergeSort(a,0,a.length-1,temp);
for(int i=0;i<a.length;i++) {
System.out.print(a[i]+" ");
}

}


}

结果:


数据结构JAVA版2017教学视频课程

本课程共28个教学视频课程,22小时的教学时间,深入浅出的理论讲解,用JAVA语言实现每个知识点的代码,大量的上机练习题讲解,通过家家乐停车场,佳佳乐彩票机,佳佳乐通讯录,编译原理的语法分析等项目的综合应用实训,上课PPT,上课源代码等资料可以直接下载使用
  • 2017年03月31日 13:31

排序算法系列:归并排序算法

上一篇我们说了一个非常简单的排序算法——选择排序。其复杂程序完全是冒泡级的,甚至比冒泡还要简单。今天要说的是一个相对比较复杂的排序算法——归并排序。复杂的原因不仅在于归并排序分成了两个部分进行解决问题...
  • u013761665
  • u013761665
  • 2016-05-27 16:32:19
  • 13608

归并排序算法原理分析与代码实现

归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,归并排序将两个已排序的表合并成一个表。      归并排序基本原理 ...
  • sdgihshdv
  • sdgihshdv
  • 2017-05-04 22:13:46
  • 1002

排序算法Java实现——归并排序

归并排序(也可以叫合并排序),其实归并排序的本质就是合并排序。 它是与插入排序、交换排序、选择排序不同的一类排序方法,不同之处在于: 它要求:待排序序列是由若干个有序子序列组成。 那么究竟什么是归并排...
  • singit
  • singit
  • 2017-04-25 22:09:04
  • 997

经典算法之归并排序的C实现方法

以前写过归并排序的算法,但是时间过了好久,忘记怎么写的了,(也是醉了)。正好复习算法的时候遇到这个问题,就重新写了一下,把遇到的一些问题顺便记录一下。核心就是用两个子数组记录分割后的两个数组中的变量,...
  • zhyh1435589631
  • zhyh1435589631
  • 2015-06-06 16:00:56
  • 1233

白话经典算法系列之五 归并排序的实现(讲的真好)

归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较...
  • yuehailin
  • yuehailin
  • 2017-04-03 16:25:48
  • 39027

“深入理解”—归并排序算法

关于归并排序的一个初步学习总结
  • qq_25827845
  • qq_25827845
  • 2017-04-30 10:50:17
  • 2741

【Java常用排序算法】归并排序(二路归并排序)

归并排序 二路归并排序 Java实现
  • donggua3694857
  • donggua3694857
  • 2017-02-27 23:17:10
  • 3226

用Python实现八大排序算法--归并排序

一、归并排序概述1.归并排序将待排序序列R[0…n-1]看成是n个长度为1的有序序列,将相邻的有序表成对归并,得到n/2个长度为2的有序表;将这些有序序列再次归并,得到n/4个长度为4的有序序列;如此...
  • chibangyuxun
  • chibangyuxun
  • 2016-11-02 21:02:58
  • 868

八大排序算法详解——归并排序

基本思想n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果: 初始状态:无序区为R[1..n],有序区为空。 第1趟排序: 在无序区R[1..n]中选出关键字最小的记录R[k],将它与...
  • cy__dream
  • cy__dream
  • 2017-02-08 20:25:43
  • 8802
收藏助手
不良信息举报
您举报文章:排序算法之归并排序
举报原因:
原因补充:

(最多只允许输入30个字)