import java.util.Comparator;
import java.util.Random;
public class MergeSort {
public static void main(String[] args) {
Integer[] a = new Integer[100];
for (int i = 0; i < a.length; i++) {
a[i] = new Random().nextInt(200);
}
MergeSort.mergeSort(a, new Integer[100], 0, a.length - 1,
new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1 < o2 ? -1 : (o1 == o2 ? 0 : 1);
}
});
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
}
public static <Elem> void mergeSort(Elem[] A, Elem[] temp, int left,
int right, Comparator<? super Elem> c) {
if (left == right)
return;
int mid = (left + right) / 2;
mergeSort(A, temp, left, mid, c);
mergeSort(A, temp, mid + 1, right, c);
for (int i = left; i <= right; i++) {// copy subarray to temp
temp[i] = A[i];
}
// Do the merge operation back to A
int i1 = left;
int i2 = mid + 1;
for (int curr = left; curr <= right; curr++) {
if (i1 == mid + 1) {
A[curr] = temp[i2++];
} else if (i2 > right) {
A[curr] = temp[i1++];
} else if (c.compare(temp[i1], temp[i2]) < 0) {
A[curr] = temp[i1++];
} else {
A[curr] = temp[i2++];
}
}
}
}
Java归并排序
最新推荐文章于 2023-05-25 12:24:00 发布