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

    合并算法,指的是将两个已经排序的序列合并成一个序列的操作
    操作步骤:
    1. 建立一个数组C用来存放合并后的数
    2. 从数组A和数组B的首端开始比较,将大的元素放入C中
    3. 重复2操作,直至其中一个数组的元素被用完,则将另一个数组中剩余的元素拷贝到C中
    比较复杂度:n㏒n
    交换(赋值)复杂度:n㏒n
    优点:比较快速的排序算法
    缺点:需要额外的空间存放临时数组

    private static void merge(Integer[] array,final int left,final int leftEnd, final int rightEnd){
            Integer[] mergeResult = new Integer[rightEnd-left+1];
            int i = 0; //mergeResult的下标
            int j = left; //left 的下标
            int k = leftEnd+1; //right 的下标
            
            //将两个数组中较小的元素拷贝到mergeResult中
            
            while(j<=leftEnd&&k<=rightEnd){
                if(array[j]<array[k]){
                    mergeResult[i++] = array[j++];
                }else{
                    mergeResult[i++] = array[k++];
                }
            }
            //将另一个数组中剩余的元素拷贝到mergeResult中
            while(j<=leftEnd){
                mergeResult[i++] = array[j++];
            }
            while(k<=rightEnd){
                mergeResult[i++] = array[k++];
            }    
            //copy mergeResult to array
            int leftPos = left;
            for(int m=0;m<mergeResult.length;m++,leftPos++){
                array[leftPos] = mergeResult[m];
            }
        }
    private static void mergeSort(Integer[] array,final int left,final int leftEnd, final int rightEnd){    
            if(left>=rightEnd){            
                return;
            }
            mergeSort(array,left,(left+leftEnd)/2,leftEnd);
            mergeSort(array,leftEnd+1,(leftEnd+1+rightEnd)/2,rightEnd);
            merge(array,left,leftEnd,rightEnd);
        }
    public static void mergeSort(Integer[] array){
            mergeSort(array,0,(array.length)/2,array.length-1);
        }
  • 相关阅读:
    Alpha阶段项目展示
    Alpha阶段测试报告
    300种常用非处方中成药--06骨伤科用药/07皮肤科用药
    300种常用非处方中成药--05五官科用药
    300种常用非处方中成药--04儿科用药
    300种常用非处方中成药--02外科用药/03妇科用药
    300种常用非处方中成药-01内科用药
    文科思人,理科格物
    谁动我的奶酪--经典句子
    博士 水上飘
  • 原文地址:https://www.cnblogs.com/tangyanbo/p/4282333.html
Copyright © 2011-2022 走看看