public class MergeSort {
private static void mergeSort(Comparable[] data,Comparable[] tmpArray, int left, int right){
if(left < right){
int center = (left + right) / 2;
mergeSort(data, tmpArray, left, center);
mergeSort(data, tmpArray, center + 1, right);
merge(data, tmpArray, left,center + 1, right);
}
}
private static void merge(Comparable[] data, Comparable[] tmpArray, int leftPos, int rightPos, int rightEnd){
int leftEnd = rightPos - 1;
int tmpPos = leftPos;
int numElements = rightEnd - leftPos + 1;
while(leftPos <= leftEnd && rightPos <= rightEnd)
if(data[leftPos].compareTo(data[rightPos]) <= 0)
tmpArray[tmpPos++] = data[leftPos++];
else
tmpArray[tmpPos++] = data[rightPos++];
while(leftPos <= leftEnd)
tmpArray[tmpPos++] = data[leftPos++];
while(rightPos <= rightEnd)
tmpArray[tmpPos++] = data[rightPos++];
for(int i = 0; i < numElements; i++, rightEnd--)
data[rightEnd] = tmpArray[rightEnd];
}
public static void mergeSort(Comparable[] data){
Comparable[] tmpArray = new Comparable[data.length];
mergeSort(data,tmpArray,0,data.length - 1);
}
public static void main(String[] args){
Comparable[] a = new Comparable[30];
for(int i = 0; i < a.length; i++)
a[i] = (int) (Math.random() * 100);
for(int i = 0; i < a.length; i++)
System.out.print(a[i] + " , ");
System.out.println("");
mergeSort(a);
for(int i = 0; i < a.length; i ++)
System.out.print(a[i] + " , ");
}
}
分享到:
相关推荐
mergeSort 方法实现了归并排序算法。它使用递归的方式将数组不断划分为更小的子数组,直到每个子数组只有一个元素,然后再依次将这些子数组进行合并,从而实现排序。 merge 方法用于合并两个有序子数组。它借助两个...
归并算法的简单举例
归并排序 归并排序算法的实现。
归并排序并行和顺序归并排序算法
常用排序算法总结,包括插入排序(InsertionSort),冒泡排序(BubbleSort),选择排序(SelectionSort),快速排序(QuickSort... * 二路归并排序(MergeSort),堆排序(HeapSort)。有每一种排序算法的复杂度分析以及实现思路~
归并排序执行三路归并排序
java写的八大经典排序算法(win7 jdk 1.6 下运行) 冒泡排序 BubbleSort 堆排序 HeapSort 插入排序 InsSort 快速排序 QuickSort 归并排序 MergeSort 基数排序 BucketSort 简单选择排序 SelectSort 希尔排序 Shell...
自顶向下归并排序-MergeSort | 自底向上归并排序-MergeBUSort | 快速排序-QuickSort | 堆排序-HeapSort :lion:搜索算法-搜索 与搜索相关的数据结构:二叉查找树,平衡查找树,散列表 线性查找-LinearSearch 二分...
leetcode切割分组 ...归并排序 | 外排序 空间复杂度 O(n),需申请与原空间同大空间 HeapSort 堆排序 QuickSort 快速排序 平均时间复杂度 O(n + k) 空间复杂度 O(k) CountingSort | 计数排序 | 用一个计算器
java8 stream 源码 ...归并排序:MergeSort (是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conqu
目录 02.字符串 03.树 ...归并排序 Java 7 SmallSum 小和问题 Java 8 ArrayDivision 数组划分问题 Java 9 NetherlandsFlag 荷兰国旗问题 Java 10 QuickSort 快速排序 Java 11 HeapSort 堆排序 Java 1
n 对于归并排序,请参见 java 文件 Mergesort.java 编译:javac Mergesort.java 运行:java Mergesort 1 2 3 4 .. n 对于快速排序,请参阅 java 文件 Quicksort.java 编译:javac Quicksort.java 运行:java ...