我一直在尝试制作合并排序代码,但是此错误消息不断出现。即使主函数中的大小是恒定的,它也会显示“预期的常数表达式”。我试图修复它,但无法修复。我该怎么办 ?
#include<iostream>
using namespace std;
void merge(int data[], int size, int first, int mid, int last);
void mergeSort(int data[], int size, int first /*low*/, int last/*high*/)
{
if(first<last)
{
//sort each half
int mid = (first + last)/2;
//index of midpoint
//sort left half the array [first .... mid]
mergeSort(data, size, first, mid);
//sort right half of the array [mid+1 ..... last]
mergeSort(data, size, mid+1, last);
//merge the two halves
merge(data, size, first, mid, last);
}
}
void merge(int data[], int size, int first, int mid, int last)
{
int tempArr[size];
int i=first;
int j=mid+1;
int k=first;
while (i<=mid && j<=last)
{
if (tempArr[i] <= tempArr[j])
{
data[k]=tempArr[i];
}
else
{
data[k] = tempArr[j];
++j;
}
++k;
}
while (i <= mid)
{
data[k] = tempArr[i];
++k;
++i;
}
}
int main()
{
const int size = 10;
int arr[size] = {1, 0, 6, 15, 30, 56, 23, 3, 7, 10};
mergeSort(arr, size, 0, size);
for(int i=0; i<size; i++)
{
cout<< arr[i]<<" ";
}
system("pause");
return 0;
}
您的代码中有几个错误。我为您重新编写了代码:),以便您可以进行更多研究,看看错误在哪里。但是,仍有许多改进空间!您可以在此处运行代码。
#include<iostream>
using namespace std;
void merge(int data[], int size, int first, int mid, int last);
void mergeSort(int data[], int size, int first /*low*/, int last/*high*/)
{
if(first<last-1) // do it if there are more than one lement
{
//sort each half
int mid = (first + last)/2;
//index of midpoint
//sort left half the array [first .... mid-1]
mergeSort(data, size, first, mid);
//sort right half of the array [mid ..... last-1]
mergeSort(data, size, mid, last);
//merge the two halves
merge(data, size, first, mid, last);
}
}
void merge(int data[], int size, int first, int mid, int last)
{
int* tempArr = new int[size];
for(int i = 0; i < size; ++i)
tempArr[i] = data[i];
int i=first;
int j=mid;
int k=first;
while (i<mid && j<last)
{
if (tempArr[i] <= tempArr[j])
{
data[k]=tempArr[i];
i++;
}
else
{
data[k] = tempArr[j];
++j;
}
++k;
}
while (i < mid)
{
data[k] = tempArr[i];
++k;
++i;
}
while (j < last)
{
data[k] = tempArr[j];
++k;
++j;
}
delete[] tempArr;
}
int main()
{
const int size = 10;
int arr[size] = {1, 0, 6, 15, 30, 56, 23, 3, 7, 10};
mergeSort(arr, size, 0, size);
for(int i=0; i<size; i++)
{
cout<< arr[i]<<" ";
}
return 0;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句