部分合并排序排序

时间:2016-01-06 23:44:20

标签: c++ algorithm sorting

输入6,2,9,1,5,8我得到1,2,6,9,5,8。这个算法基于https://gist.github.com/mycodeschool/9678029#file-mergesort_c-c-L28编写 请帮助我获得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]<<" ";
}
}

1 个答案:

答案 0 :(得分:1)

你的问题是这些循环

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

位于此循环while(i<lc && j<rc)内,如果a[]已完成b[]a[]b[]有一些元素,那么它们应该在你的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++]; } } 之外复制val conf = new SparkConf().setMaster("local").setAppName("Transpose") val sc = new SparkContext(conf) 这是整个合并函数

onCreate()