2017-06-06 61 views
0

这是实现合并排序我的代码,它显示没有错误可言 并没有给出输出两种:相同的代码,但奇怪的行为

#include<iostream> 

using namespace std; 

void merge(int arr[],int l,int m,int r) 
{ 
    int i,j,k; 
    int n1 = m-l+1; 
    int n2 = r-m; 

    int L[n1],R[n2]; 

    for(i=0;i<n1;i++) 
    { 
     L[i]=arr[i+l]; 
    } 

    for(j=0;j<n2;j++) 
    { 
     R[j]=arr[m+1+j]; 
    } 

    i=0; 
    j=0; 
    k=1; 

    while(i<n1 && j<n2) 
    { 
     if(L[i]<=R[j]) 
     { 
      arr[k]=L[i]; 
      i++; 
     } 
     else 
     { 
      arr[k]=R[j]; 
      j++; 
     } 
     k++; 
    } 

    while(i<n1) 
    { 
     arr[k]=L[i]; 
     i++; 
     k++; 
    } 

    while(j<n2) 
    { 
     arr[k]=R[j]; 
     j++; 
     k++; 
    } 

} 

void mergeSort(int arr[], int l, int r) 
{ 
    if(l < r) 
    { 

     int m = l+(r-1)/2; 

     mergeSort(arr, l, m); 
     mergeSort(arr, m+1, r); 

     merge(arr, l, m, r); 
    } 
} 

void printArray(int A[],int size) 
{ 
    int i; 
    for(i=0;i<size;i++) 
     cout<<A[i]<<" "; 
} 

int main() 
{ 
    int arr[]={12,65,34,78,90,65,34}; 
    int arr_size = sizeof(arr)/sizeof(arr[0]); 

    cout<<"Given array is \n"; 
    printArray(arr, arr_size); 

    mergeSort(arr, 0, arr_size - 1); 

    cout<<"\nSorted array is \n"; 
    printArray(arr, arr_size); 
return 0; 
} 

现在这里是一段代码,这是问题:

void mergeSort(int arr[], int l, int r) 
{ 
    if (l < r) 
    { 


     int m = l+(r-l)/2; 


     mergeSort(arr, l, m); 
     mergeSort(arr, m+1, r); 

     merge(arr, l, m, r); 
    } 
} 

如果我取代与上述程序的归并()此归并()码, 程序给出的输出。 但一看,既归并()码是相同的(在程序代码以及提到的归并()代码)

连结原始代码===>http://cpp.sh/6zdip

链接到代码替换之后归并====>http://cpp.sh/7lfo

这是最奇怪的问题,我曾经遇到过。

回答

1

这不是一样的代码。

on your original code:int m = l +(r-1)/ 2;

上的工作代码:int m = l +(r-1)/ 2;

字母L小写可以看起来像'1',但它不是。

现在,尝试一件事:让代码的空间保持一致(通过在两个代码上运行clang格式),然后使用差异应用程序来验证代码和运行代码之间的差异。

这是很容易我这样做时发现:

> int m = l + (r - 1)/2; 
> --- 
> int m = l + (r - l)/2; 
+0

也'k = 1时;''VS K =升;' – bolov

+0

是有可以比较的两个码的差异任何IDE ?? – GeekyCoder

+0

我不知道,我不使用IDE。如果您运行linux或macos,请使用'diff'命令,如果您使用Windows,请尝试kdiff3。 –