java排序之四归并排序

之前几种排序对数组小的效果比较好一点,现在来一个相对复杂点的。归并排序的原理:从字面上解释归并就是合并的意思,要合并起码的条件就是有两个数组。思路就可以从要排序的数组中找到中间值分为前后两个部分进行分别排序然后在合并,基本思路确定就可以考虑下如何实现了。

public static void mergeSort(int[] arr, int fromIndex, int toIndex){
if(fromIndex < toIndex){
// 找出中间值
int mid = (fromIndex + toIndex) >>> 1;
// 前半部分
mergeSort(arr, fromIndex, mid);
// 后半部分
mergeSort(arr, mid + 1, toIndex);
// 归并
merge(arr, fromIndex, mid, toIndex);
}
}

// 归并方法

private static void merge(int[] arr, int left, int center, int right){
int[] relArr = new int[arr.length];
int low = left;
int temp = left;
int high = center + 1;

// 同事循环2个部分
while(left <= center && high <= right){
if(arr[left] < arr[high]){
relArr[low++] = arr[left++];
}else{
relArr[low++] = arr[high++];
}
}

// 如果前半部分没有合并完继续循环
while(left <= center){
relArr[low++] = arr[left++];
}

// 如果后半部分没有合并完也继续循环
while(high <= right){
relArr[low++] = arr[high++];
}

// 把中间值再放回去
while(temp <= right){
arr[temp] = relArr[temp++];
}
System.out.println(Arrays.toString(arr));
}

算法没有好坏之分要和实际要操作的数组大小和存储的值有关


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值