java 自底向上的归并排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 自底向上的归并排序相关的知识,希望对你有一定的参考价值。
public class MergeBU {
private static Comparable[] temp;
public static void sort(Comparable[] a) {
int N = a.length;
temp = new Comparable[N];
for (int size = 1; size < N; size *= 2) { // size: 子数组大小,每次翻倍
for (int low = 0; low < N - size; low += size * 2) { // low: 子数组第一个元素的索引
merge(a, low, low + size - 1, Math.min(low + size * 2 - 1, N - 1));
}
}
}
public static void merge(Comparable[] a, int low, int mid, int high) {
// 将a[low...mid]和a[mid+1...high]归并
// 将数组a复制到数组temp
for (int k = low; k <= high; k++) {
temp[k] = a[k];
}
int i = low;
int j = mid + 1;
for (int k = low; k <= high; k++) {
if (i > mid) { // 左半边用尽
a[k] = temp[j++]; // 取右半边元素
} else if (j > high) { // 右半边用尽
a[k] = temp[i++]; // 取左半边元素
} else if (less(temp[j], temp[i])) {
a[k] = temp[j++];
} else {
a[k] = temp[i++];
}
}
}
private static boolean less(Comparable v, Comparable w) {
return v.compareTo(w) < 0;
}
private static void show(Comparable[] a) {
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println();
}
public static void main(String[] args) {
Integer[] a = {1, 3, 7, 7, 0, 5, 7, 1, 0, 5, 9};
sort(a);
show(a);
}
}
以上是关于java 自底向上的归并排序的主要内容,如果未能解决你的问题,请参考以下文章
自底向上的归并排序算法
自底向上归并排序(Merge Sort)
算法——归并排序(自顶向下自底向上)
排序算法-归并排序
挖掘算法中的数据结构:O(n*logn)排序算法之 归并排序(自顶向下自底向上) 及 算法优化
精益求精单链表归并排序与快速排序