package sort;
import java.util.Arrays;
public class MergeSort {
/**
* @param args
*/
public static void main(String[] args) {
int[] a = {3,6,2,9,5,8,7,1,4};
System.out.println(Arrays.toString(mergeSort(a)));
}
//归并排序,是经典分治策略的应用。这里用的是最容易理解的方式
public static int[] mergeSort(int[] a){
//递归的基本情形
if (a.length == 0 || a.length == 1)
return a;
int[] left = Arrays.copyOfRange(a, 0, a.length/2);
int[] right = Arrays.copyOfRange(a, a.length/2, a.length);
left = mergeSort(left);
right = mergeSort(right);
//merge合并两个已排序的数组
return merge(left, right);
}
private static int[] merge(int[] a, int[] b) {
if (a.length == 0)
return b;
if (b.length == 0)
return a;
int apointer = 0;
int bpointer = 0;
int cpointer = 0;
int[] c = new int[a.length + b.length];
//直到其中一个数组空了跳出循环
while (apointer != a.length && bpointer != b.length){
if (a[apointer] <= b[bpointer])
c[cpointer++] = a[apointer++];
else
c[cpointer++] = b[bpointer++];
}
//把余下的复制到c中
while (apointer < a.length)
c[cpointer++] = a[apointer++];
while (bpointer < b.length)
c[cpointer++] = b[bpointer++];
return c;
}
}
排序算法之归并排序
最新推荐文章于 2024-06-04 16:36:07 发布