zoukankan      html  css  js  c++  java
  • 归并排序

    地将数组不断分为两个子数组,然后对子数组排序后进行合

    /*
        思路就是将两个有序数组进行组合,通过递归得到左右排序好的数组
         */
        //组合函数
        public void combine(int[] a,int sta,int mid,int end,int[] res)
        {
            int f = sta;
            int sta2 = mid+1;
            int i = 0;
            //两个数组都没有遍历完
            while (sta<=mid&&sta2<=end)
            {
                if (a[sta]<a[sta2]) res[i++] = a[sta++];
                else res[i++] = a[sta2++];
            }
            while (sta<=mid) res[i++] = a[sta++];
            while (sta2<=end) res[i++] = a[sta2++];
            //将排序结果添加到a中,让a形成有序数组
            for (int j = 0; j < i; j++) {
                a[j+f] = res[j];
            }
        }
        public void sort(int[] a ,int sta,int end,int[] res)
        {
            //分治思想把子数组排为有序数组
            if (sta<end)
            {
                int mid = (sta+end)/2;
                sort(a,sta,mid,res);
                sort(a,mid+1,end,res);
                combine(a,sta,mid,end,res);
            }
        }
        public void mergeSort(int[] a)
        {
            int[] res = new int[a.length];
            sort(a,0,a.length-1,res);
        }
  • 相关阅读:
    [转]nmake命令(windows下的makefile)
    [转]Visual Studio 2010 C++ 工程文件解读
    [转]开源库的编译
    强软弱虚引用试验
    ArtHas JVM在线排查工具
    JVM常用参数
    CMS两个常见问题
    jvisual vm连接
    jconsole连接
    JVM调优
  • 原文地址:https://www.cnblogs.com/stAr-1/p/8445377.html
Copyright © 2011-2022 走看看