归并排序(Java代码实现)
2018-03-06 18:27
489 查看
归并排序
归并排序采用的是分治(divide-and-conquer)法思想。(1)基本思想:将待排序元素分成大小大致相同的2个子集合,分别对2个子集合进行排序,最终将排好序的子集合合并成为所要求的排好序的集合。
(2)执行过程:
(3)算法思路:
(4)Java代码实现如下:
public class Main {
public static void main(String[] args) {
int[] arr = {11,44,23,67,88,65,34,48,9,12};
int[] tmp = new int[arr.length]; //新建一个临时数组存放
mergeSort(arr,0,arr.length-1,tmp);
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
public static void merge(int[] arr,int low,int mid,int high,int[] tmp){
int i = 0;
int j = low,k = mid+1; //左边序列和右边序列起始索引
while(j <= mid && k <= high){
if(arr[j] < arr[k]){
tmp[i++] = arr[j++];
}else{
tmp[i++] = arr[k++];
}
}
//若左边序列还有剩余,则将其全部拷贝进tmp[]中
while(j <= mid){
tmp[i++] = arr[j++];
}
while(k <= high){
tmp[i++] = arr[k++];
}
for(int t=0;t<i;t++){
arr[low+t] = tmp[t];
}
}
public static void mergeSort(int[] arr,int low,int high,int[] tmp){
if(low<high){
int mid = (low+high)/2;
mergeSort(arr,low,mid,tmp); //对左边序列进行归并排序
mergeSort(arr,mid+1,high,tmp); //对右边序列进行归并排序
merge(arr,low,mid,high,tmp); //合并两个有序序列
}
}
}(5)运行结果如下:
(6)复杂度分析:
相关文章推荐
- 排序基础之归并排序、快排、堆排序、希尔排序思路讲解与Java代码实现
- 归并排序 C++/Java 递归实现代码 -犯了菜鸟老毛病
- 算法代码实现之归并排序,Java实现,自顶向下与自底向上两种方式
- 归并排序--JAVA代码实现
- Java实现常见排序--希尔排序、快排序、堆排序、归并排序等Java实现代码
- 归并排序的原理及java代码实现
- 插入排序及归并排序java代码实现及详细注释
- 快速排序,归并排序,堆排序的java代码实现
- 算法-java代码实现归并排序
- java 算法之归并排序详解及实现代码
- 选择,插入,希尔,快速,堆,归并排序六种排序方式的Java 实现和性能对比(付代码)
- 一个直接用java类实现连接池的代码例子
- JAVA断点续传实现方法代码
- 购物车的 java 代码实现方法
- java代码中实现字符编码转换(解决中文乱码问题)
- Jsp/Java代码分离.实现页面真正的代码分离 实现框架代码,jxui:page标签
- Jsp/Java代码分离.实现页面真正的代码分离 实现框架代码:BasePage,TextBox,BasePageFilter
- Jsp/Java代码分离.实现页面真正的代码分离 测试代码是否按想法运行,下载原代码
- Java中数据库事务处理的实现-JSP教程,Java技巧及代码
- 用Java实现归并排序(Merge-Sort)算法