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

      归并排序,也是基于分治的思想,把一个数组不断切分,直到分到尾一个元素,然后两两合并,由于从一个元素开始的,所以这样每个合并的数组都是有序的, 合并只需要常数的时间完成,所以它的时间递推式为 :T(n) = 2T(n/2) + O(n), 前一项是分为两个子数组的时间复杂度,后面一项是合并两个排序好的数组的时间复杂度是O(n),

      它的运行过程,在这里在网上找了一个图,很清晰的说明了这个过程:    

    下面是java的归并排序的demo:

     

    public static  void  mergeSort(int[] a, int start, int end){
    
       int[] sorted = new int[a.length];
       if(start < end){
         int mid = (start + end)/2;
    
         mergeSort(a,start,mid);
         mergeSort(a,mid+1,end);
         merge(a,start,mid,end,sorted);
       }
    }
    
     public static void merge(int[] a, int left, int mid, int right,int[] sorted){
    
        int i = left;
        int k = left;
        int j= mid+1;
    
        while(i <= mid && j <= right){
            if(a[i] < a[j]){
                sorted[k++] =  a[i++];
            }else{
                sorted[k++] = a[j++];
            }
        }
    
         //copy后半部分
         while(i <= mid){
             sorted[k++] = a[i++];
         }
    
         while(j <= right){
             sorted[k++] = a[j++];
         }
    
         //拷贝正确的位置
         for(int q = left; q <= right; q++){
             a[q] = sorted[q];
         }
     }
    
      public static void main(String[] args) {
    
          int[] a  = {1,4,5,32,3,44};
    
          mergeSort(a,0,a.length-1);
    
          for(int e : a){
              System.out.print(e + " ");
          }
      }
     
  • 相关阅读:
    react.js 小记
    docker命令收集
    前端体系
    微信小程序疑问解答
    微信小程序实战笔记
    jQuery.zTree的跳坑记录
    移动web端的react.js组件化方案
    深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接
    字符串转换成数组,去最号的分割号
    linq any()方法实现sql in()方法的效果
  • 原文地址:https://www.cnblogs.com/xjz1842/p/5994098.html
Copyright © 2011-2022 走看看