Merge Sort的java语言实现
来源:互联网 发布:电脑滚动字幕软件 编辑:程序博客网 时间:2024/05/29 16:28
归并排序的实现
思想:采用的分治法(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语言实现可以看这里
1 0
- Merge Sort的java语言实现
- Merge Sort的实现
- Merge Sort(归并排序)的JAVA与Python实现
- Java实现归并排序(Merge-Sort)算法
- Selection sort的java语言实现
- 归并排序(merge sort)的实现
- Python实现merge sort
- 用Java实现归并排序(Merge-Sort)算法
- 归并排序(Merge Sort)递归、非递归 Java实现
- merge sort 的代码
- 归并排序(merge sort)的一个基于模板的实现
- Merge Sort 并且返回逆序数的算法 - C#实现
- leetcode: Sort List, Merge sort solution. Java
- 用java 写 merge sort
- VS 2010 std::list.sort函数实现的非递归merge sort
- Quick Sort的Java实现
- 面试需要掌握的排序 Quick Sort and Merge Sort 快速排序和归并排序 [Java]
- 归并排序(merge sort)算法实现
- Log4net 初识及简单使用
- POJ2001 -- 字典树和字符串的前缀
- SCM知识拓展
- Java回忆录(八)--------异常处理
- Objective-C面向对象(中)
- Merge Sort的java语言实现
- iptables对报文中TTL的操作
- java动态代理和静态代理
- Python之学习笔记(正则表达式)
- solr分页查询和高亮
- poj 1182 食物链 【带权并查集】
- 用回溯法解决0-1背包问题
- Android之Intent原理
- iOS核心面试题 ~