Я пытаюсь реализовать сортировку слияния. Мой код работаетОпределение размера бокового массива в сортировке слиянием
void merge(int * , int , int , int );
void mergeSort(int *arr , int low , int high){
if(low < high){
int mid = (low + high)/2;
mergeSort(arr , 0 , mid);
mergeSort(arr , mid +1, high);
merge(arr , low , mid , high);
}
}
void merge(int *arr , int low , int mid , int high){
int barr[ high ];
int i = low;
int j = mid + 1;
int index = low;
while(i <= mid && j <= high){
if(arr[i] < arr[j]){
barr[index++] = arr[i++];
}
else{
barr[index++] = arr[j++];
}
}
if(i < mid + 1)
for(int x = i ; x < mid +1 ; x++)
barr[ index++ ] = arr[x];
if(j <= high)
for(int y = j ; y < high ; y ++)
barr[ index++ ] = arr[y];
for(int z = low ; z < index ; z++){
arr[z] = barr[z];
}
}
int main()
{
int arr[] = { 5 ,6 , 2, 6 ,7 , 5 ,8 ,9};
mergeSort(arr , 0 , 8);
for(int i = 0; i < 8 ; i++){
cout << arr[i] << " ";
}
return 0;
}
Что я имею трудное время, чтобы решить, как эта линия
int barr[high];
Как я могу решить, эффективный размер этой стороне массива? Я думал, что high-low будет достаточно, но при этом его не будет, bcs, когда я создам arary размером 1, я получаю доступ к элементам по более крупному индексу. Есть ли способ, как решить это, или я должен всегда создавать массив высоких элементов, что приведет к большому потреблению памяти = мой код не эффективен.
Благодаря
Возможно, вам стоит переместить это на [codereview.se]. –
Посмотрите, как они это делают: http://quiz.geeksforgeeks.org/merge-sort/ – NathanOliver
Замечание VLA недействительно C++ code – Slava