排序算法之归并排序
来源:互联网 发布:python argv列表参数 编辑:程序博客网 时间:2024/06/15 06:20
今天分享的算法是归并排序,排序有很多种算法
=====相关链接====
有对快速排序感兴趣的同学请点击锦绣谷传送门
有对堆排序感兴趣的同学请点击银月城传送门
进入我们今天的正题,首先引入概念
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。
看个例子,如一个无序数组3,5,7,2,6,1,3,8,4
归并排序的策略是将有序的子序列合并,也就是说我们要把它拆成若干个子序列,也就是拆成
3,5|7,2|6,1|3,8|4 之后我们对有序的子序列进行合并,先对3,5|7,2进行合并
同样操作我们对6,1,3,8也进行一下归并,得到新的数组是1,3,6,8
然后在堆2,3,5,7和1,3,6,8进行排列,得到新的数组1,2,3,3,5,6,7,8
最后对1,2,3,3,5,6,7,8和4进行排列,得到最终数组1,2,3,3,4,5,6,7,8
这就是一个完整的归并排序,下面我们看代码
public class MergeSort {//合并方法private static void mergeArray(int[] array,int l,int m,int r){//nlogn//start1 = l end1 = m//start2 = m+1 end2=r//指定长度结果int[] temp = new int[r-l+1];//start1int i = l;//start2int j = m+1;int k = 0;//temp下标while(i <= m && j <= r){temp[k++] = array[i] < array[j] ? array[i++] :array[j++];}//右侧数组用完,左侧数组全部拿下来while(i <= m){temp[k++] = array[i++];}//左侧数组用完,右侧数组全部拿下来while(j <= r){temp[k++] = array[j++];}//新数组赋值给老数组for (int x = 0, y = l; x < temp.length; x++ , y++) {array[y] = temp[x];}}private static void mergeSort(int[] array,int l,int r){if(l == r){return;}int m = (l+r)/2;mergeSort(array, l, m);//左mergeSort(array, m+1, r);//右mergeArray(array, l, m, r);//合并}public static void main(String[] args) {int[] array = new int[]{3,5,7,2,6,1,3,8,4};mergeSort(array, 0, array.length-1);for (int i : array) {System.out.print(i+",");}}}
我们先调用mergeSort方法,里面递归调用mergeSort,目的在于把数组分成多个有序的小数组,然后调用mergeArray进行归并操作,得到最终数组
代码上面有详细的注释,可以根据上面的步骤对照看一下,如果有问题请留言,第一时间解答
阅读全文
0 0
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- hdu4267(树状数组,有规则区间修改)
- 树莓派配置静态IP
- Linux下Socket头文件详解
- 怎么办理按揭买房?按揭买房需要哪些手续和资料?
- Java 枚举类型(java.lang.Enum)
- 排序算法之归并排序
- jQuery Ajax 实例 ($.ajax、$.post、$.get)
- mybatis 需要注意的点 MyBatis 插入空值时,需要指定JdbcType (201
- Apache Maven 构建生命周期
- 我的第一个MFC小程序——文件夹下图片批量灰度化和归一化
- c++深拷贝、浅拷贝、写时拷贝
- 安卓mediaplayer(1)
- java排序算法
- HTML5---第二十二天