zoukankan      html  css  js  c++  java
  • 【算法导论C++代码】归并排序

          一个归并排序卡了一天最后还是归并算法有问题,最初是为了把算法导论的伪代码转到c++而加了一些东西,其中在对左右数组的赋值那里出了问题。因为进行测试时不完全,就是只用书上的数组进行测试时,归并算法部分还好使,而归并排序不好使,一度以为是函数递归出了问题。现在看来,首先要看懂递归模型,然后算法的基础要弄明白,输入的参数一定要弄好,不要总弄常量进行测试。

    //MERGE(A,p,q,r)
    
    // n1=q-p+1
    
    // n2=r-q
    
    // let L[1...n1+1] and R[1..n2+1] be new arrays
    
    // for i=1 to n1
    
    //  L[i]=A[p+i-1]
    
    // for j=1 to n2
    
    //  R[j]=A[q+j]
    
    // L[n1+]=infinity
    
    // R[n2+1]=infinity
    
    // i=1
    
    // j=1
    
    // for k=p to r
    
    //  if L[i]<=R[j]
    
    //  A[k]=L[i]
    
    //  i=i+1
    
    //  else A[k]=R[j]
    
    //  j=j+1
    
    #include <iostream> using namespace std;
    void Merge(int A[],int p,int q,int r)
    
    {  int n1=q-p+1;
    
     int n2=r-q;  
    
    int *L=new(int[n1]);
    
     int *R=new(int[n2]);
    
     for (int i=0;i<n1;i++)  
    
    {   L[i]=A[i+p-1];//这两个地方不能瞎改,跟归并排序有关,乱改了就会出现归并无法进行的情况。  }  
    
    L[n1]=10000;
    
     for (int j=0;j<n2;j++)
    
     {   R[j]=A[q+j];//这两个地方不能瞎改  }
    
       R[n2]=10000;
    
       int i=0;
    
       int j=0;  
    
      int k;
    
     for (k=p-1;k<r;k++)  
    
    {   
    
      if (L[i]<=R[j])  
    
     { 
       A[k]
    =L[i];    i++;
    }
    else { A[k]=R[j]; j++; } } //delete L; //delete R;//一加这两条程序就死了 } void MergeSort(int A[],int p,int r)//归并排序 { if( p < r ) { int q=(p+r)/2; MergeSort(A,p,q); MergeSort(A,q+1,r); Merge(A,p,q,r); } } //MERGE-SORT(A,p,r) // if q<r // q=[(p+r/2)] // MERGE-SORT(A,p,q) // MERGE-SORT(A,q+1,r) // MERGE(A,p,q,r) int main() { int A[]={9,8,7,6,5,4,3,2,1,0,6,5,4,3,2}; //int A[]={2,4,5,7,1,2,3,6}; int p,r,q; p=1; //q=4; r=15; cout<<"排序前:"; for (int i=0;i<r;i++) cout<<A[i]<<' '; cout<<endl; MergeSort(A,p,r);//归并排序 cout<<"排序后:"; for (int i=0;i<r;i++) cout<<A[i]<<' '; cout<<endl; system("pause"); return 0; }

     

  • 相关阅读:
    dalvik浅析二:jni、so
    android apk壳
    prism4 StockTrader RI 项目分析一些体会
    PRISM ‘VS100COMNTOOLS’ not set. Cannot set the build environment
    安卓移动应用代码安全加固系统设计及实现
    手机游戏外挂技术研究与运用
    移动终端安全威胁与应对措施
    游戏软件反外挂技术方案的设计和安全解决方案
    网络安全等级保护 2.0 下的安全体系建设
    APP加密,ios代码混淆工具,虚拟化技术 适用于移动应用程序的虚拟化加密软件
  • 原文地址:https://www.cnblogs.com/fastcam/p/4444553.html
Copyright © 2011-2022 走看看