Merge Sort的java语言实现
2015-05-31 15:49
531 查看
归并排序的实现
思想:采用的分治法(Divide and Conquer)来实现第一步,将数组分成两半
第二步:将这两半分别排序
第三步:将排好序的两个子数组归并成一个
由于实现比较简单,直接上代码,如下
package org.wrh.algorithmimplements; import java.util.Arrays; public class MergeSortImplement { //归并排序的实现 public static void main(String[] args) { int[] a={9,6,4,6,3,1,8,7,13,19}; System.out.println("排序前的数组如下:"+Arrays.toString(a)); mergeSort(a,0,a.length-1); System.out.println("排序后的数组如下:"+Arrays.toString(a)); } public static void mergeSort(int [] arr,int left,int right){ if(left<right){ int middle=left+(right-left)/2; mergeSort(arr,left,middle); mergeSort(arr,middle+1,right); merge(arr,left,middle,right); } } public static void merge(int[] arr,int left,int middle,int right){ //定义几个临时数组和变量 int n1=middle-left+1; int n2=right-middle; int [] arr_left=new int[n1];; int [] arr_right=new int[n2]; for(int i=0;i<n1;i++){ arr_left[i]=arr[left+i]; } for(int j=0;j<n2;j++){ arr_right[j]=arr[middle+1+j]; } //归并到arr数组中 int i=0; int j=0; int k=left; while(i<n1&&j<n2){ if(arr_left[i]<=arr_right[j]){ arr[k]=arr_left[i]; i++; k++; } else{ arr[k]=arr_right[j]; j++; k++; } } //下面两个while循环时将左右两个数组没有排完的继续归并到院数组中 while(i<n1){ arr[k]=arr_left[i]; k++; i++; } while(j<n2){ arr[k]=arr_right[j]; k++; j++; } } }
总结:
归并排序的递归方程为:T(n)=2*T(n/2)+n归并排序的实现复杂度为:O(nlogn)
关于归并排序的更多知识和C语言实现可以看这里
相关文章推荐
- Struts2中获取请求参数
- java final域
- Java的引用类型(附图说明)
- Java笔记--集合
- Java笔记--异常
- JAVA 静态代码块
- 如何在Ubuntu 14.04中安装最新版Eclipse
- java final 内部类使用外部的局部变量
- 初识Java
- java web 开发资料链接
- OSS实现多文件多线程的断点上传(java)
- 解决JAVA字符串长度与数据库字符串长度不一致问题
- 疯狂Java学习笔记(62)------------线程初识
- Java基本语法学习时需要注意的几点
- java集合排序
- Java实现二叉排序(查找)树的操作
- java学习之集合框架工具类
- 一款工具助你减少java代码bug
- Java反射基础(二)— Class类
- java io操作整理