java算法(一)——排序算法(下)之 合并排序
来源:互联网 发布:linux中怎么复制文件 编辑:程序博客网 时间:2024/06/12 00:33
合并排序(MergeSort)算法就是将多个有序数据表合并成一个有序数据表的过程,如果只有两个有序数列则成为二路合并。
以下是合并排序的具体算法:
import sun.net.www.content.text.plain;import com.sun.accessibility.internal.resources.accessibility;public class MergeSort { public static void mergeOne(int[]a ,int[]b ,int n,int len){ int i,j,k,s,e; s=0; while(s+len<n){ e=s+2*len-1; if(e>=n){ e=n-1; } //相邻有序段合并 k=s; i=s; j=s+len; while(i<s+len && j<=e){ if(a[i]<=a[j]){ b[k++] = a[i++]; } else { b[k++] = a[j++]; } } while(i<s+len){ b[k++]=a[i++]; } while(j<=e){ b[k++]=a[j++]; } s=e+1; } if(s<n){ for(;s<n;s++){ b[s]=a[s]; } } } public static void mergeSortall(int[]a , int n){ int h,len,f; len=1; f=0; int[] p=new int[n]; while(len<n){ if(f==1){ mergeOne(p, a, n, len); } if(f==0){ mergeOne(a, p, n, len); } len=len*2; f=1-f; } if(f==1){ System.out.print("**"); for(int i=0;i<n;i++){ a[i]=p[i]; System.out.print(" "+a[i]); } } if(f==0){ System.out.print("++"); for(int i=0;i<n;i++){ System.out.print(" "+a[i]); } } } public static void main(String[] argv){ int[] a={1,8,6,7,5,12,45,766,0,87}; mergeSortall(a, a.length); }}
以上就是合并排序的具体算法,如果两个序列的排序程度越高,则此算法的效率越高。
0 0
- java算法(一)——排序算法(下)之 合并排序
- java算法(一)——排序算法(下)之 shell排序
- java算法(一)——排序算法(下)之 插入排序
- java算法(一)——排序算法(下)之 快速排序
- 排序算法之——合并排序/归并排序(Java实现)
- 排序算法之——合并排序/归并排序(Java实现)
- (基于Java)算法之合并排序
- 算法之 排序算法 (一) Java
- 合并排序算法(java)
- 算法相关——Java排序算法之桶排序(一)
- Java排序算法总结之(一)——插入排序(直接插入排序、折半插入排序、希尔排序)
- Java常用排序算法之合并排序
- 基础算法系列(十)排序算法之合并排序
- 排序算法之——冒泡排序(一)
- 【JAVA】算法排序(一)——选择排序法
- 递归分治算法之合并排序(Java版本)
- 算法之旅——合并排序
- 一步一步写算法(之合并排序)
- MySQL读书笔记-安装初始化操作
- DispatcherServlet 源码阅读(1)
- 一种赋值方式
- Word Pattern
- 【C++】STL常用容器总结之一:容器与迭代器
- java算法(一)——排序算法(下)之 合并排序
- 自定义VC作为iOS程序的RootVC
- Pods-frameworks.sh: No such file or directory、Pods-resources.sh: No such file or directory
- android webview设置内容的字体大小
- liunxqu安装nginx
- 阻塞赋值和非阻塞赋值
- Leptonica --> tesseract --> OpenCV
- machine-learning:提纲
- [图形学] 纹理映射原理详解