我已经实现了合并排序算法。我正确调试了代码。 但无法确定我的代码出了什么问题。 这是我的代码:
#include<iostream>
using namespace std;
void merge(int* l,int nL,int* r,int nR,int * a){
//merging the arrays
int i=0,j=0,k=0;
while(i<nL && j<nR){
if(l[i]<=r[j]){
i++;
a[k]=l[i];
}
else{
j++;
a[k]=r[j];
}
k++;
}
//now elements that are left out
while(i<nL){
a[k]=l[i];
k++;
i++;
}
while(j<nR){
a[k]=r[j];
j++;
k++;
}
}
这是我用于实现合并排序算法的 mergeSort 函数。
void mergeSort(int* a,int n){
//base case
if(n<2)
return;
//rec case
int mid=n/2;
//take 2 arrays of size mid & (n-mid)
int nL=mid;
int nR=n-mid;
int l[nL];
int r[nR];
//fill the arrays
for(int i=0;i<mid;i++){
l[i]=a[i];
}
for(int i=mid;i<n;i++){
r[i-mid]=a[i];
}
//call merge sort recursively
mergeSort(l,nL);
mergeSort(r,nR);
merge(l,nL,r,nR,a);
}
这是主要函数,我将数组作为输入并传递给函数 mergeSort
int main(){
int a[100];
cout<<"Enter no of elements"<<endl;
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
mergeSort(a,n);
cout<<"After sorting with merge sort"<<endl;
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
return 0;
}
函数 merge()合并两个数组,而 mergeSort 是分割数组并实现合并排序的函数。
我将此作为输入:
8
2 4 1 6 8 5 3 7
输出:
6 1006565088 2096014825 6 2098806136 2096014825 93 8
答案 0 :(得分:2)
问题是因为在函数合并中,i
和j
的值在将值分配给左右数组之前递增。
while循环应为:
while(i<nL && j<nR){
if(l[i]<=r[j]){
a[k]=l[i];
i++; //here was the mistake.
}
else{
a[k]=r[j];
j++; // here was the mistake
}
k++;
}