二路归并2算法的java实现(普通方法)
2014-12-03 20:36
543 查看
这里是二路归并排序算法的普通实现:
package GB; /** * * @author YuYunTan(谭淇蔚) *这里是算法,归并排序,这是二路归并排序算法 *分治策略的思想: *任一实例 *I = (n,A[1],...,A )分成两个这样的实例 *I1 = ([n/2],A[1],...,A([n/2]))和 *I2 = ([n/2],A[[n/2]+1],...,A(n)) *分别对每个集合单独排序,然后将已排序的两个序列归并成一个含n个元素的分好类的序列 * *这种思想是典型的分治设计思想,归并排序也叫做分治合并排序 * *算法如下: *procedure MERGESORT(low,high) *global A[1...n] *if(low < high) * then mid = (low+high)/2;//求这个集合的分隔点 * { * MERGESORT(low,mid);//将这个子集合排序 * MERGESORT(mid+1,high)//将另一个子集合排序 * MEREG(low,mid,high); * } * end * * procedure MERGE(low,mid,high) * global A[1..n] * 设置辅助数组B(low..high) * h←low;i←low;j←mid+1 * while h≤mid and j≤high do * { if A[h]≤A[j] then * B[i] ←A[h];h←h+1 * else * B[i] ←A[j];j←j+1 * i←i+1 * } * if h>mid then //前部分已空 * for k←j to high do //处理后部分剩余的元素 * B[i] ←A[k] * i←i+1 * else * for k←h to mid do //处理前部分剩余的元素 * B[i] ←A[k] * i←i+1 * A ← B /* 将B数组的值赋给A数组 * * end */ public class GuiBingSort { public static void main(String[] args) { int []A ={3,9,4,7,10,34,23,11,2,1}; System.out.println("排序前的数组为:"); print(A); MERGESORT(A,0,A.length-1); System.out.println("排序后的数组为:"); print(A); } private static void print(int[] a) { // TODO 自动生成的方法存根 for(int i=0;i<a.length;i++){ System.out.print(a[i]+" "); } System.out.println(""); } private static void MERGESORT(int[] A, int low, int high) { // TODO 自动生成的方法存根 int mid; if(low < high){ mid = (low+high)/2; MERGESORT(A,low, mid);//一个子集合排序 MERGESORT(A,mid+1, high);//另一个子集合排序 MERGE(A,low,mid,high);//归并两个以排序的子集合 } } private static void MERGE(int[] A, int low, int mid, int high) { // TODO 自动生成的方法存根 int h=low; int i=low; int j=mid+1; int []B = new int [A.length]; while((h<= mid)&&(j <= high)){ if(A[h] <= A[j]){ B[i] = A[h]; h = h+1; }else{ B[i]=A[j]; j = j+1; } i++; } if(h>mid){//前面部分已经空了 for(int k=j;k<=high;k++){ B[i]=A[k]; i++; } }else{//处理前部分剩余元素 for(int k=h;k<=mid;k++){ B[i]=A[k]; i++; } } for(int p = low;p<=high;p++){ A[p] = B[p]; } } }
相关文章推荐
- 二路归并算法的实现方法,用到vector容器
- 二路归并算法非递归C实现
- 背包算法递归实现,递归转动态规划的一般方法java实现
- 归并算法(java 语言实现)
- 余弦方法计算相似度算法--Python实现 Java实现
- 归并算法的Java实现
- 普通java类(排序)实现Comparable接口重写CompareTo方法
- java归并算法实现
- 二路归并算法(参考) Java
- Java遍历集合方法分析(实现原理、算法性能、适用场合)
- java实现排序算法之归并排序(2路归并)
- 【算法】归并排序的java实现
- 二路归并排序的Java实现
- Java归并算法递归实现
- 数据挖掘各种算法JAVA的实现方法
- 【算法与数据结构】冒泡、插入、归并、堆排序、快速排序的Java实现代码
- Java实现的排序算法及比较 [冒泡,选择,插入,归并,希尔,快排]
- 待更新·优化问题求解算法实现方法·Java版
- [算法入门]快速排序非递归方法(Java实现),大家一起来找茬啊~
- Java遍历集合的几种方法分析(实现原理、算法性能、适用场合)