import java.util.Arrays;
public class MergeSort {
public static void main(String[] args) {
int[] arr1 = {4,2,6,3,5};
System.out.println(Arrays.toString(arr1));
mergeSort(arr1,0,arr1.length-1);
System.out.println(Arrays.toString(arr1));
}
public static void mergeSort(int[] arr,int l,int r) {
//0 4
if (l<r) {
int q = (l+r)/2;
mergeSort(arr,l,q);
mergeSort(arr,q+1,r);
merge(arr,l,q,r);
}
}
/**
*
* @param arr 排序数组
* @param l 数组最左边下标
* @param q 数组中间位置下标
* @param r 数组最右位置下标
*/
public static void merge(int[] arr, int l, int q, int r) {
/**因为每次切割后左边下标都是(l,q),右边数组的下标是(q+1,r)
* 所以左边数组的元素个数就是q - l + 1
* 右边的数组元素个数就是r - q
* **/
final int n1 = q-l+1;//切割后左边数组的数据长度
final int n2 = r-q;//切割后右边数组的数据长度
/**创建两个新数组将切割后的数组分别放进去,长度加1是为了放置无穷大的数据标志位**/
final int[] left = new int[n1+1];//加一操作是增加无穷大标志位
final int[] right = new int[n2+1];//加一操作是增加无穷大标志位
//两个循环将数据添加至新数组中
/**左边的数组下标是从l到q**/
/**遍历左边的数组*/
for (int i = 0; i < n1; i++) {
left[i] = arr[l+i];
}
for (int i = 0; i < n2; i++) {
right[i] = arr[q+1+i];
}
//将最大的正整数放在两个新数组的最后一位
left[n1] = Integer.MAX_VALUE;
right[n2] = Integer.MAX_VALUE;
int i = 0,j = 0;
//谁小谁放在前面
for (int k = l; k <= r; k++) {
if (left[i]<=right[j]) {
arr[k] = left[i];
i = i+1;
} else {
arr[k] = right[j];
j = j+1;
}
}
}
}
用Java实现归并排序算法
原创
©著作权归作者所有:来自51CTO博客作者香山上的麻雀的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:用户七日留存率分析
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【C】排序算法
文章介绍了几种常用的排序,包括其实现思路与具体代码实现。
排序 算法 代码分析 -
归并排序 算法
算法思路将一个数列不断拆分为子序列,直到只剩下0或者1个元素再将子序列
子数组 i++ 子序列 -
【算法】归并排序
归并排序当两组数据已经有序,我们可以通过以下方式让两组数据快速排序。依次从
1024程序员节 算法 排序算法 数组 i++ -
算法——归并排序
堆排序(Heap Sort)是一种常见的排序算法,基于二叉堆的数据结构。它利用堆这种数据结构的特性来进行排序,通过多
算法 数据结构 java 堆排序 数组 -
java的long类型除法四舍五入
BigDecimal实现精确除法与单位转换:从百万分之一到亿并四舍五入至两位小数引言示例一:基础操作示例二:动态转换示例三:批量转换与异常处理结论 引言 在处理金融、科学计算或其他对精度要求极高的场景时,java.math.BigDecimal 类型提供了强大的浮点数运算功能,能够避免 float 和 d
java的long类型除法四舍五入 BigDecimal List 四舍五入 ide