import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* 归并排序的java实现
*
* @version 1.0 2011-07-13 10:10
* @author 鬼辅神攻
*
*/
public class MergeSort {
/**
* @param <T>
* 必须实现了Comparable接口
* @param list
* 待排序数组
* @return 正序排列的结果
*/
public static <T extends Comparable<T>> List<T> sort(List<T> list) {
int size = list.size();
// 结束条件,数组长度为1
if (size < 2) {
return list;
}
return merge(sort(list.subList(0, size / 2)), sort(list.subList(
size / 2, size)));
}
/**
* 采用正序排列
*
* @param <T>
* @param leftArray
* 必须是已经排过序的
* @param rightArray
* 必须是已经排过序的
* @return 排过序的数组
*/
private static <T extends Comparable<T>> List<T> merge(List<T> leftArray,
List<T> rightArray) {
List<T> result = new ArrayList<T>();
int j = 0;// right array index
for (int i = 0; i < leftArray.size(); i++) {
T left = leftArray.get(i);
// compare to the next of right array, till >=
for (; j < rightArray.size();) {
T right = rightArray.get(j);
if (left.compareTo(right) <= 0) {
result.add(left);
break;
} else {
// add the next of right array to result
result.add(right);
j++;
continue;
}
}
// if the leave of the left array is exist, add all to the result.
if (j >= rightArray.size()) {
result.add(left);
continue;
}
}
// if the leave of the right array is exist, add all to the result.
for (; j < rightArray.size(); j++) {
result.add(rightArray.get(j));
}
return result;
}
// test
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>(Arrays
.asList(new Integer[] { 3, 4, 3, 73, 23, 11, 34 }));
System.out.println("result:");
System.out.println(MergeSort.sort(list).toString());
}
}
分享到:
相关推荐
java 实现归并排序,有代码实现,复杂度分析,基本步骤,适合初学者吧,
NULL 博文链接:https://yeelor.iteye.com/blog/1964843
实现归并排序的一个类
利用分治法思想实现归并排序,Java语言描述。
使用Java实现简单的归并排序算法,给大家提供一个参考。
外排序--基于败者树的多路归并排序算法的java实现
给初学者学习算法用,用java实现的排序算法,包括二路归并和插入排序。
自然合并的核心主要是一个Pass函数,这个函数中设置了一个array数组,来存放每一组有序元素的起始元素的下标,最后再将最后一个元素的下标+1存放为array数组的最后一个元素,这样,在后面的合并实现中会显现出这样记录的...
归并排序的java实现
该资源提供了一份全面的指南,介绍了如何在Java中实现归并排序。文档中涵盖了归并排序的基本概念,包括如何对数组进行排序以及如何在Java中实现归并排序。此外,文档还包括一个逐步指南,介绍如何在Java中实现归并...
归并排序的链表实现 随机生成实验数据,可以统计算法运行时间
这是关于归并排序的demo,里面有递归版和非递归版的实现
Java实现归并排序.rar
归并排序,消除递归归并排序,快排,Java实现
在Java实现中,归并排序通过递归调用mergeSortHelper方法将数组划分为更小的子数组,并在最后使用merge方法将有序子数组合并成一个完整的数组。归并排序虽然需要额外的空间来存储临时数组,但其稳定的性能和可并行化...
一个Java小程序,利用递归思想实现的归并排序算法。其中有两个类,排序数据是写死在main方法中的。
快速排序、归并排序、希尔排序、冒泡排序、选择排序、插入排序等8中排序方式原理分析java实现
JAVA排序大全 冒泡 快速 选择 归并排序
自动生成500个随机数,然后对这500个随机数进行归并排序
归并排序 在排序前,先建好一个长度等于原数组长度的临时数组