• 归并排序


    合并两个有序数组并排序:
    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;
      }
    }

  • 相关阅读:
    360删除、修改注册表问题
    朗姆达表达式类似IN查询条件
    SQL 分组排序、CASE...WHEN...、是否为空 查询
    Excel 复制Sql查询结果错位
    redis实现购物车秒杀原理
    sphinx的使用
    linux安装
    linux和windows的区别
    Yii2.0实现语言包切换功能
    Linux的7个级别
  • 原文地址:https://www.cnblogs.com/huangshan/p/3386695.html
Copyright © 2020-2023  润新知