mergeSort java实现

public class MergeSort {
public static final int MAX_NUM = 99999999;
public void merge(int[] A, int p, int mid, int q) {
int n1 = mid - p + 1;
int n2 = q - mid;
int[] L = new int[n1 + 2];
int[] R = new int[n2 + 2];
L[n1 + 1] = MergeSort.MAX_NUM;            //控制边界,重要!
R[n2 + 1] = MergeSort.MAX_NUM;            //控制边界,重要!
for(int i = 1; i <= n1; i++) {
L[i] = A[p + i -1];
}
for(int i = 1; i <= n2; i++) {
R[i] = A[mid + i];
}
int l = 1;
int r = 1;

for(int i = p; i <= q; i++) {
if(L[l] <= R[r]) {
A[i] = L[l];
++l;
} else if(L[l] > R[r]) {
A[i] = R[r];
++r;
}
}
}

public void mergeSort(int[] A, int p, int q) {
if(p >= q) {
return;
}
int mid = (p + q)/2;
mergeSort(A, p, mid);
mergeSort(A, mid + 1, q);
merge(A, p, mid, q);
}

public static void main(String[] args) {
int[] a = {0, 18, 8, 5, 10, 6, 13, 14, 7, 5, 17};
MergeSort ms = new MergeSort();
ms.mergeSort(a, 1, a.length - 1);
HeapSort.pOut(a, a.length - 1);
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值