MergeSort归并排序图文代码详解
来源:互联网 发布:java写二维码 编辑:程序博客网 时间:2024/05/22 14:13
MergeSort归并排序就是将一组数分割成两个子数组,再对子数组进行排序,然后再归并起来。
在这个过程中,通过递归的方式对子数组进行归并排序。
过程(Wikipedia):
- 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
- 设定两个指针,最初位置分别为两个已经排序序列的起始位置
- 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
- 重复步骤3直到某一指针到达序列尾
- 将另一序列剩下的所有元素直接复制到合并序列尾
废话不多说,上图:
代码如下:
<span style="font-size:18px;">import java.util.Arrays;public class MergeSort {public static void mergeSort(int [] array){ int middle=array.length/2;//中间标 if(array.length>1){ int[]left=Arrays.copyOfRange(array,0,middle);//拷贝数组array的左半部分int[]right=Arrays.copyOfRange(array,middle,array.length);//拷贝数组array的右半部分mergeSort(left);//对左边数组递归mergeSort(right);//对右边数组递归merge(array,left,right);//数组左、右合并到Array for (int j = 0; j < array.length; j++) { System.out.print(array[j]); System.out.print(","); } System.out.println();}} //合并数组,升序private static void merge(int[]result,int[]left,int[]right){ int i=0,l=0,r=0; while(l<left.length&&r<right.length){ if(left[l]<right[r]){result[i]=left[l];i++;l++;}else{result[i]=right[r];i++;r++;}}//如果右边剩下合并右边的while(r<right.length){result[i]=right[r];r++;i++;}//如果左边剩下合并左边的while(l<left.length){result[i]=left[l];l++;i++;}}public static void main(String[] args) { int[] arr = { 55, 56, 23, 90, 47, 9, 40, 82, 76, 33 }; for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]); System.out.print(","); } System.out.println(); mergeSort(arr); }}</span>
结果:
可以看出,对数组进行分割排序的过程。
0 0
- MergeSort归并排序图文代码详解
- 归并排序 MergeSort Java代码
- mergesort 归并排序
- mergesort归并排序
- MergeSort归并排序
- 归并排序--MergeSort
- MergeSort归并排序
- 归并排序(MergeSort)
- Mergesort-归并排序
- 归并排序算法 MergeSort
- 归并排序--MergeSort
- mergeSort - 归并排序
- 归并排序 MergeSort
- MergeSort归并排序
- 归并排序 MergeSort
- 归并排序(MergeSort)
- Mergesort-归并排序
- 【MergeSort】归并排序
- 多边形区域填充算法--递归种子填充算法
- 链表 Add Two Numbers
- 数据存储与访问(1)-------------文件
- Android图片缩放总结及比较
- FFmpeg之Rtsp分析(一):Pause和seek
- MergeSort归并排序图文代码详解
- [html] 实现点击切图的小算法
- 用单循环初始化多维数组
- 5.用户模块:注册将数据存入到数据库
- linux无法ping通windows
- 偷袭荆州的孙权英明吗
- CSS学习之:盒子模型
- eclipse 运行cocos 2d js 程序
- 网址URL中特殊字符转义编码