2017-10-07 1 views
1

Der folgende Code verwendet die mergeSort-Algorithmen zum Sortieren eines Arrays mit bis zu 1500000 Zahlen. Allerdings bekomme ich immer Fehler für die Linie long temp [] = new long[end - start + 1]; Mergesort-Algorithmusfehler

Die Fehlermeldung, die ich bekomme sind: 'initializing': cannot convert from 'long *' to 'long []' und initialization with '{...}' expected for aggregate object. Gibt es eine Möglichkeit, diese bestimmte Linie zu beheben?

#ifndef DataGen_h 
#define DataGen_h 
#include "RandomSupport.h" 
#include<limits> 
#include<iostream> 

void merge(long list[], long start, long end) { 

    long middle = (start + end)/2; 


    long temp [] = new long[end - start + 1]; 
    long temp_index = 0; 


    long left = start; 
    long right = middle + 1; 


    while((left <= middle) && (right <= end)) { 

     if (list[left] < list[right]) {    
      temp[temp_index] = list[left]; 
      temp_index++; 
      left++; 
     } else { 
      temp[temp_index] = list[right]; 
      temp_index++; 
      right++; 
     } 
    } 

    while(left <= middle) { 
     temp[temp_index] = list[left]; 
     temp_index++; 
     left++; 
    } 

    while(right <= end) { 
     temp[temp_index] = list[right]; 
     temp_index++; 
     right++; 
    } 

    for(long i = start; i <= end; i++) { 
     list[i] = temp[i - start]; 
    } 
} 


void mergeSort(long list[], long start, long end) { 
    if(start < end) { 

     long middle = (start + end)/2; 

     mergeSort(list, start, middle); 
     mergeSort(list, middle + 1, end); 

     merge(list, start, end); 
    } 
} 

void efficientRandomSortedList(long temp[], long s){ 
// Get a new random device 
randomizer device = new_randomizer(); 
// Get a uniform distribution from 1 to 1000 
uniform_distribution range = new_distribution(1, 15000000); 

for (long i = 0; i < s; i++) { 
    // At every cell of the array, insert a randomly selected number 
    // from distribution defined above 
    temp[i] = sample(range, device); 
} 

// Now sort the array using insertion_sort 
mergeSort(temp,0,s); 

Antwort

1

Seit new long[end - start + 1] gibt einen Zeiger auf einen Speicherblock, benötigen Sie ein entsprechendes long * Variable, es zu akzeptieren:

long *temp = new long[end - start + 1]; 

Da Sie new ...[] verwenden, müssen Sie eine entsprechende delete[] Äußerung befreie den Speicher, wenn du damit fertig bist. Vergessen Sie nicht, folgendes am Ende von merge() hinzuzufügen:

delete[] temp;