打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
java 算法基础之三合并排序法

合并排序算法是用分治策略实现对N个元素进行排序的算法。其基本思想是:

将待排序元素分成大小大致相同 的两个子集合,分别 对两个子集合进行排序,最终将排好序的子集合合并成所要求的排好序的集合。

重点:

1.分治的实现 

2.合并的实现 

分治,就是把整个集合的元素一直除2化分,一直化为到没有两个元素开始合并。

图:

分治的时候比较简单,一直除2递归就行了,合并的时候为了方便就借助另一个变化的数组来接收交换的数组,

合并的时候,两个指标i、j,把值比较小的放入temp数组中,然后放入那个值的那一边的指标自加,继续比较。一直把值合部排完合并为一个数组,然后把temp数组复制回到原来数组就可以进入下一个递归。

完全代码由下:

public class  Merge{    //递归分成小部分    public void merge_sort(int[] arrays,int start,int end){        if(start<end){            int m=(start+end)/2;            merge_sort(arrays,start,m);            merge_sort(arrays,m+1,end);            combin_arrays(arrays,start,m,end);            }    }    //合并数组    public void combin_arrays(int[] arrays,int start,int m,int end){        int length=end-start+1;        int temp[]=new int[length];//用来存放比较的数组,用完复制回到原来的数组        int i=start;        int j=m+1;        int c=0;        while(i<=m &&j<=end){            if(arrays[i]<arrays[j]){                temp[c]=arrays[i];                i++;                c++;            }else{                temp[c]=arrays[j];                j++;                c++;            }        }        while(i<=m){            temp[c]=arrays[i];            i++;        }        while(j<=end){        temp[c]=arrays[j];        j++;        }        c=0;        for(int t=start;t<=end;t++,c++){            arrays[t]=temp[c];        }        snp(arrays);    }    //打印数组    public void snp(int[] arrays){        for(int i=0;i<arrays.length;i++){        System.out.print(arrays[i]+" ");        }        System.out.println();    }        public static void main(String[] args)     {        Merge m=new Merge();        int a[]={5,4,10,8,7,9};        m.merge_sort(a,0,a.length-1);            }}

 

由有不对之处请大家指出,谢谢

找一个博客做自己的女朋友,不管你跟她说什么她都帮你记录,这是多么幸福的一件事啊。如果有女生能做到这点,赶尽娶回家吧!
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
归并排序
几种排序算法的改进
算法设计与分析 2.7 归并排序
JAVA中运用数组的四种排序方法
面试必备:冒泡,选择,插入,希尔,归并,快速排序大合集
快速排序--C语言
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服