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

    分治的思想包括了三个基本的步骤:

    1.分解;

    2.解决;

    3.合并。

    归并排序最主要的就是“合并”。

     1 //分治算法
     2 #include<stdio.h>
     3 #define infinite 32767
     4 
     5 //合并
     6 void Merge(int *A,int p,int q,int r)
     7 {
     8      int n1,n2,*L,*R,i,j,k;
     9      n1=q-p+1;
    10      n2=r-q;
    11      L=new int[n1+1];
    12      R=new int[n2+1];
    13      for(i=0;i<n1;i++)
    14           L[i]=A[p+i];
    15      for(j=0;j<n2;j++)
    16           R[j]=A[q+j+1];
    17      L[i]=infinite;
    18      R[j]=infinite;
    19      i=0;
    20      j=0;
    21      for(k=p;k<=r;k++)
    22      {
    23           if(L[i]<=R[j])
    24           {
    25                A[k]=L[i];
    26                i++;
    27           }
    28           else
    29           {
    30                A[k]=R[j];
    31                j++;
    32           }
    33      }
    34      delete[] L;
    35      delete[] R;
    36 }
    37 
    38 //分解
    39 void Merge_sort(int *A, int p, int r)
    40 {
    41      if(p<r)
    42      {
    43           int q =(p+r)/2;
    44           printf("p=%d
    ",q);
    45           Merge_sort(A,p,q);
    46           Merge_sort(A,q+1,r);
    47           Merge(A,p,q,r);
    48      }
    49 }
    50 
    51 int main()
    52 {
    53      int a[5]={5,4,3,2,1};
    54      Merge_sort(a,0,4);
    55      for(int i=0;i<5;i++)
    56           printf("%2d",a[i]);
    57      return 0;
    58 }
    View Code
    世上无难事,只要肯登攀。
  • 相关阅读:
    NOIP前的一些计划
    回文自动机[学习笔记]
    Luogu-3705 [SDOI2017]新生舞会
    01分数规划[学习笔记]
    jvm参数总结
    读懂jstack
    PRODUCER配置加载
    为什么WAIT必须在同步块中
    NIO学习笔记
    dp求最长递增子序列并输出
  • 原文地址:https://www.cnblogs.com/littlehoom/p/3425777.html
Copyright © 2011-2022 走看看