java里的归并_Java 归并排序

归并排序

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序是一种稳定的排序方法。

代码

/**

* 将一个数组递归分割,分为两个部分,再排序合并,一直延伸下去,直至无法再分割(即数组中元素为1)

*

*/

public static int [] megreSort(int [] array) {

if(array.length<=1) {

return array;

}

//对半分割

int mid = array.length/2;

int [] left = Arrays.copyOfRange(array, 0, mid);

int [] right = Arrays.copyOfRange(array, mid, array.length);

return mergeArray(megreSort(left),megreSort(right));//递归调用

}

/**

* 合并两个已排好序的数组,并排序

* @param left

* @param right

* @return

*/

public static int [] mergeArray(int [] left,int [] right) {

int i = 0;//控制left 数组下标

int j = 0;//控制right数组下标

int index = 0;//合并后的数组下标

int [] result = new int[left.length+right.length];

for(;index

if(i>=left.length) {

//left数组元素已全部合并完成,此时只有right数组的元素还有剩余未全部合并,这里直接取right数组元素

result[index] = right[j++];

}else if(j>=right.length) {//这里同上

result[index] = left[i++];

}else if(left[i]>right[j]) {//比较并排序,这里由小到大,由于是两个排好序的数组合并,所以,每次比较拿到的都是当前两个数组的最小值

result[index] = right[j++];

}else {

result[index] = left[i++];

}

}

return result;//将排好序的数组返回

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值