二分归并排序java程序代码_java归并排序(最精简代码)

public class MergeSortTest {

public void sort(int[] array, int left, int right) {

if (left >= right)

return;

// 找出中间索引

int center = (left + right) / 2;

// 对左边数组进行递归

sort(array, left, center);

// 对右边数组进行递归

sort(array, center + 1, right);

// 合并

merge(array, left, center, right);

// 打印每次排序结果

for (int i = 0; i < array.length; i++) {

System.out.print(array[i] + "\t");

}

System.out.println();

}

/**

* 将两个数组进行归并,归并前面2个数组已有序,归并后依然有序

*

* @param array

* 数组对象

* @param left

* 左数组的第一个元素的索引

* @param center

* 左数组的最后一个元素的索引,center+1是右数组第一个元素的索引

* @param right

* 右数组最后一个元素的索引

*/

public void merge(int[] array, int left, int center, int right) {

// 临时数组

int[] tmpArr = new int[array.length];

// 右数组第一个元素索引

int mid = center + 1;

// third 记录临时数组的索引

int third = left;

// 缓存左数组第一个元素的索引

int tmp = left;

while (left <= center && mid <= right) {

// 从两个数组中取出最小的放入临时数组

if (array[left] <= array[mid]) {

tmpArr[third++] = array[left++];

} else {

tmpArr[third++] = array[mid++];

}

}

// 剩余部分依次放入临时数组(实际上两个while只会执行其中一个)

while (mid <= right) {

tmpArr[third++] = array[mid++];

}

while (left <= center) {

tmpArr[third++] = array[left++];

}

// 将临时数组中的内容拷贝回原数组中

// (原left-right范围的内容被复制回原数组)

while (tmp <= right) {

array[tmp] = tmpArr[tmp++];

}

}

public static void main(String[] args) {

int[] array = new int[] { 5, 69, 12, 3, 56, 789, 2, 5648, 23 };

MergeSortTest mergeSortTest = new MergeSortTest();

mergeSortTest.sort(array, 0, array.length - 1);

System.out.println("排序后的数组:");

for (int m = 0; m <= array.length - 1; m++) {

System.out.print(array[m] + "\t");

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值