C++ 部分合并排序

C++ 部分合并排序,c++,algorithm,sorting,C++,Algorithm,Sorting,对于输入6,2,9,1,5,8,我得到1,2,6,9,5,8 请帮助我获得1,2,5,6,8,9,因为输出也指出了错误。提前感谢 #include<iostream> using namespace std; void merge(int a[],int l[],int lc,int r[],int rc){ int i,j,k; i=0;j=0;k=0; while(i<lc && j<rc){ if(l[i]<r[j

对于输入6,2,9,1,5,8,我得到1,2,6,9,5,8 请帮助我获得1,2,5,6,8,9,因为输出也指出了错误。提前感谢

#include<iostream>
using namespace std;

void merge(int a[],int l[],int lc,int r[],int rc){
  int i,j,k;
  i=0;j=0;k=0;
  while(i<lc && j<rc){
        if(l[i]<r[j]){
          a[k++]=l[i++];
      }
      else{
        a[k++]=r[j++];
     }
    while(i<lc){
        a[k++]=l[i++];
    }
    while(j<rc){
        a[k++]=r[j++];
    }
}
}

void mergesort(int a[],int n){
  int mid;
  if (n<2){
    return;
 }
 mid=n/2;
 int l[mid],r[n-mid];
 for(int i=0;i<mid;i++){
    l[i]=a[i];
 }
 for(int i=mid;i<n;i++){
    r[i-mid]=a[i];
}
mergesort(l,mid);
mergesort(r,n-mid);
merge(a,l,mid,r,n-mid);
}

int main(){
int a[]={6,2,9,1,5,8};
int n=6;
mergesort(a,n);
for(int i=0;i<n;i++){
    cout<<a[i]<<" ";
}
}
#包括
使用名称空间std;
无效合并(int a[],int l[],int lc,int r[],int rc){
int i,j,k;
i=0;j=0;k=0;

而(i你的问题是这些循环

while(i<lc){
    a[k++]=l[i++];
}
while(j<rc){
    a[k++]=r[j++];
}

您采取了哪些调试步骤?至少,输入print语句来跟踪例程的执行和值。我建议您在线搜索“如何调试程序”。您将获得大量有用的点击。
void merge(int a[],int l[],int lc,int r[],int rc)
{
    int i,j,k;
    i=0;
    j=0;
    k=0;
    while(i<lc && j<rc)
    {
        if(l[i]<r[j])
        {
            a[k++]=l[i++];
        }
        else
        {
            a[k++]=r[j++];
        }
    }
    while(i<lc)
    {
        a[k++]=l[i++];
    }
    while(j<rc)
    {
        a[k++]=r[j++];
    }
}