请帮助我猜测了解以下代码中的错误。
它返回相同的数组。
例如,如果我将2,5,3,1作为输入,则返回2,5,3,1而不进行排序。
示例输出:
Enter the total number of elements: 4
Enter the elements which to be sort:
2
5
3
1
Un-Sorted Array: 2531
Sorted Array: 2531
这是我的代码 - 出了什么问题?
#include <iostream>
using namespace std;
int l,m,h;
int merge(int A[], int low, int mid, int high){
int A1[10];
int A2[10];
int n1, n2, i, j, k;
n1=m-l+1;
n2=h-m;
for (i=0; i<n1; i++)
A1[i]=A[l+i];
for (j=0; j<n2; j++)
A1[j]=A[m+j+1];
A1[i]=9999;
A2[i]=9999;
i=0;
j=0;
for(k=1; k<=h; k++){
if (A1[i] <= A2[j])
A[k]=A1[i++];
else
A[k]=A2[j++];
}
return 0;
}
int merge_sort(int A[],int low,int high){
int mid;
if(low<high){
mid=(low+high)/2;
merge_sort(A,low,mid);
merge_sort(A,mid+1,high);
merge(A,low,mid,high);
}
return 0;
}
int A[20];
int main(){
int i,n;
cout << "Enter the total number of elements: ";
cin >> n;
cout << "\nEnter the elements which to be sort: ";
for(i=0;i<n;i++){
cin >> A[i];
}
cout << " \nUn-Sorted Array: ";
for(i=0;i<n;i++){
cout << A[i];
}
merge_sort(A,0,n-1);
cout << "\nSorted Array: ";
for(i=0;i<n;i++){
cout << A[i];
}
return 0;
}
答案 0 :(得分:0)
您的merge
函数会忽略其参数low
,mid
,high
并使用全局变量l
,h
,{{1程序启动时设置为零,从不设置非零。因此,它对一个空数组进行排序(或可能是可以想象的排序),并使其余数据保持未排序状态。 (仅仅是另一个不信任全局变量的理由。)
我还没有确认是否还有其他问题(可能有)。但是首先要注意你的函数参数会有所帮助。
如果您的编译器没有警告您有关未使用的参数,您要么没有将警告调高到足够高,要么需要更好的编译器。
答案 1 :(得分:0)
int merge(int A[], int low, int mid, int high){
int A1[10];
int A2[10];
int n1, n2, i, j, k;
n1=mid-low+1;//use parameter
n2=high-mid;//ditto
for (i=0; i<n1; i++)
A1[i]=A[low+i];//ditto
for (j=0; j<n2; j++)
A2[j]=A[mid+j+1];//ditto
A1[i]=9999;
A2[j]=9999;//typo i -> j
i=0;
j=0;
for(k=low; k<=high; k++){//k=1 typo and use parameter
if (A1[i] <= A2[j])
A[k]=A1[i++];
else
A[k]=A2[j++];
}
return 0;
}