快捷搜索:

java实现排序算法之:归并排序

归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为多少个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。

归并排序是建立在归并操作上的一种有效的排序算法。该算法是采纳 分治法(Divide and Conquer)的一个异常范例的利用。

繁杂度

光阴O(nlogn)

空间O(n)

与快速排序类似。

看代码:

import java.lang.reflect.Array;

public class MergeSorter{public void sort(Integer[] array, int from, int len) {

if (len 1)return;

//临时控件寄放必要合并的序列Integer[] temporary = (Integer[]) Array.newInstance(array[0].getClass(), len);

merge_sort(array, from, from + len - 1, temporary);}

private final void merge_sort(Integer[] array, int from, int to, Integer[] temporary) {

if (toreturn;

}int middle = (from + to) / 2;

merge_sort(array, from, middle, temporary);merge_sort(array, middle + 1, to, temporary);

merge(array, from, to, middle, temporary);}

private final void merge(Integer[] array, int from, int to, int middle,Integer[] temporary) {

int k = 0, leftIndex = 0, rightIndex = to - from;//temporary中全半部分直接复制

System.arraycopy(array, from, temporary, 0, middle - from + 1);for (int i = 0; i

//temporary后半部分倒序temporary[to - from - i] = array[middle + i + 1];

}//temporary 中心大年夜两边小以是可以直接从两边开始对照

while (k 1) {//对照大年夜小 小的在左边

if (temporary[leftIndex].compareTo(temporary[rightIndex]) 0) {array[k + from] = temporary[leftIndex++];

} else {array[k + from] = temporary[rightIndex--];

}k++;

}}

// 打印数组public void printArray(Integer[] a) {

System.out.println();for (int i = 0; i

System.out.print(a[i] + "");if ((i + 1) % 5 == 0) {

}}

System.out.println();}

public static void main(String[] args) {Integer[] a = { 45, 26, 13, 27, 35, 10, -455, -90, 2008, 1024, 101,

555, 216, 82 };MergeSorter aa = new MergeSorter();

aa.sort(a, 0, a.length);aa.printArray(a);

}}

您可能还会对下面的文章感兴趣: