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

    合并两个有序数组并排序:
    int *combination(int *a,int n1,int *b,int n2){
      int *c=new int[n1+n2];
      int i=0;
      int j=0;
      int count=0;
      while((i<n1)&&(j<n2)){
        if(a[i]<b[j]){
        c[count++]=a[i++];

        }

        else{
          c[count++]=b[j++];
        }
      }
      if(count<n1+n2-1){
        while(i<n1){
          c[count++]=a[i++];
        }
        while(j<n2){
          c[count++]=b[j++];
        }
      }
      return c;
    }

    合并一个数组内的两个分别有序部分,无返回。

    void merge(int *a,int i,int j,int k){
      int *c=new int[k-i+1];
      int p=i;
      int q=j+1;
      int count=0;
      while((p<=j)&&(q<=k)){
        if(a[p]<a[q]){
          c[count++]=a[p++];
        }
        else{
          c[count++]=a[q++];
        }
      }
      if(count<k-i+1){
        while(p<=j){
          c[count++]=a[p++];
        }
        while(q<=k){
          c[count++]=a[q++];
        }
      }
      int m=0;
      while(m<k-i+1){
        a[i+m]=c[m];
        ++m;
      }
    }

    归并排序:二分法,分别对两边排序,再合并。

    void merge_sort(int *a,int start,int end){
      if(end!=start){
        int middle=(start+end)/2;
        merge_sort(a,start,middle);
        merge_sort(a,middle+1,end);
        merge(a,start,middle,end);
      }

      else{
        return;
      }
    }

  • 相关阅读:
    使用js获取表单元素的值
    分页问题
    空值转换问题
    MySQL数据库操作基础
    二叉树DFS遍历递归和非递归做法
    BFS经典算法
    stack & queue及经典例题
    Recursion & Binary search
    Leetcode之SpiralMatrix(I,II)
    Leetcode之贪心算法
  • 原文地址:https://www.cnblogs.com/huangshan/p/3386695.html
Copyright © 2011-2022 走看看