找不到标识符合并



合并排序:

#include<iostream>
using namespace std;
int main() {
int n;
cin>>n;
int arr[100];
for (int i = 0; i < n; i++) {
cin>> arr[i];
}
void mergesort(int arr,int n);
for(int i=0;i<n;i++){
cout<<arr[i];
}
return 0;
}
void merge(int* l, int* r, int mid, int x,int *arr) {
int i=0,j=0,k=0;
while(i<mid&&j<x){
if(l[i]<r[i]){
arr[k++]=l[i++];
}
else
{
arr[k++]=r[j++];        
}
}
while(i<mid){
arr[k++]=l[i++];
}
while(j<x){
arr[k++]=r[j++];
}
}
void mergesort(int *arr, int n) {
if (n < 2) {
return;
}
int mid, x;
int* l, * r;
mid = n / 2;
x = n - mid;
l = new int[mid];
r = new int[x];
for (int i = 0; i < mid; i++) {
l[i] = arr[i];
}
for (int i = 0; i <x; i++) {
r[i] = arr[i];
}
mergesort(l, mid);
mergesort(r, x);
merge(l,r,mid,x,arr);
delete[] l;
delete[] r;
}

相同的阵列正在打印自身。

我做错了什么吗?

它说合并:未找到标识符

如何解决问题?

似乎由于使用指令

using namespace std;

编译器无法解决歧义。

使用限定名称,如::merge

例如

::merge(l,r,mid,x,arr);

在你的main()中,void mergesort(int arr,int n);行是一个函数声明(它与函数的实际实现不匹配(。 你只是在宣告mergesort(),你实际上并没有在召唤它。 因此,您正在打印与输入相同的数组,因为您实际上根本没有对数组进行排序。

试试这个:

void mergesort(int *arr,int n); // <-- fixed and moved up here!
int main() {
int n;
cin>>n;
int arr[100];
for (int i = 0; i < n; i++) {
cin>> arr[i];
}
for(int i=0;i<n;i++){
cout<<arr[i]; // <-- added so you can see the array before it is modified!
}
cout<<endl;
mergesort(arr,n); // <-- actually call it now!
for(int i=0;i<n;i++){
cout<<arr[i]; // <-- now the array is printed out as modified!
}
return 0;
}
void merge(int* l, int* r, int mid, int x,int *arr) {
...
}
void mergesort(int *arr, int n) {
...
}

现场演示

也就是说,您的mergesort()函数无法正确对数组进行排序,即输入5 4 5 2 1 3将数组排序为44444。 但这是一个不同的问题,您应该单独发布一个新问题。

最新更新