2016-05-08 58 views
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) 
    { 
     //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; 
} 
+0

您声明了'int tempArr [size];'但是在调用它的元素之前初始化了它。 –

+0

但我在主要功能。我甚至试图把它放在使用namespace std;所以它会是全球仍然是相同的错误 – magician

回答

0

您的代码中有几处错误。我为你重写了代码:)所以你可以多研究一下,看看你的错误在哪里。不过,还有很多需要改进的地方!您可以运行代码here

#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; 
} 
+0

非常感谢。我会看看它,而且我很确定我会因为你的帮助而学习更多东西。 – magician

+0

看过它并尝试运行它后,它仍然给我同样的错误。该错误强调int tempArr [size]中的大小;并说“预计一个恒定值” – magician

+0

我在代码中包含一个链接,您可以在其中运行它。它在那里工作得很好。你使用什么编译器? –

相关问题