Java算法学习-----------------归并排序算法
来源:互联网 发布:linux执行存储过程 编辑:程序博客网 时间:2024/06/15 18:10
将数组中的相邻元素两两配对,用归并算法进行排序,构成n/2组长度为2的排好序的子数组段,然后再将其排成长度为4的子数组段,如此继续下去直到整个数组排好序。
按照此思想,消除递归后的归并排序算法(伪代码)如下:
public class MergeSort {public static void mergeSort(Comparable[]a){Comparable[]b=new Comparable[a.length];int s=1;while (s<a.length){mergePass(a,b,s);//合并到数组bs+=s;mergePass(b,a,s);//合并到数组as+=s;}}private static void mergePass(Comparable[] x, Comparable[] y, int s) {//合并大小为s的相邻数组int i=0;while (i<=x.length-2*s) {//合并大小为s的两端相邻字数组merge(x,y,i,i+s-1,i+s*2-1);i=i+2*s;}//剩下的元素个数小于2sif (i+s<x.length) {merge(x, y, i, i+s-1, x.length-1);}else//复制到y {for (int j = i; j < x.length; j++) {y[j] = x[j];}}}private static void merge(Comparable[] c, Comparable[] d, int l, int m, int r) {//合并c[l:m]和c[m+1,r]到d[l:r]int i=1, j=m+1,k=l;while (i<=m && j<=r) {if (c[i].compareTo(c[j])<=0){d[k++]=c[i++];}else{d[k++]=c[j++];}}if (i>m){for (int k2 = 0; k2 <=r; k2++) {d[k++] = c[k2];}}else{for (int k2 = 0; k2 <=m; k2++) {d[k++] = c[k2];}}}}
2 0
- Java算法学习-----------------归并排序算法
- 算法学习-归并排序
- 归并排序算法学习
- 算法学习-归并排序
- 算法学习--归并排序
- 算法学习:归并排序
- java归并排序算法
- JAVA归并排序算法
- Java算法 归并排序
- Java归并排序算法
- 归并排序算法--Java
- 算法学习之java实现归并排序
- Java排序算法 归并排序
- java排序算法---归并排序
- Java排序算法:归并排序
- JAVA排序算法---归并排序
- Java排序算法--归并排序
- Java 排序算法-归并排序
- 如何使用SQLite数据库(翻译的不好,见谅)
- jQuery选择器中last-of-type和first-of-type效果案例
- java中的HashTable,HashMap和HashSet
- Eclipse LogCat 消息清除太快,自动消失的解决方法
- 字节对齐问题
- Java算法学习-----------------归并排序算法
- php foreach用法和实例
- 第二章 知识导图(待完善)
- think it over
- 二叉树遍历算法的实现(先序、中序、后序)
- python中的lambda表达
- 模板模式C++实现
- HDU 3832 Earth Hour
- 互联网缔造全球脑时代