2017-10-07 3 views
1

Le code suivant utilise les algorithmes mergeSort pour trier un tableau contenant jusqu'à 1500000 numéros. Cependant, je continue à obtenir des erreurs de la ligne long temp [] = new long[end - start + 1]; Erreurs de l'algorithme Mergesort

Le message d'erreur que je continue à recevoir sont: 'initializing': cannot convert from 'long *' to 'long []' et initialization with '{...}' expected for aggregate object. Est-il possible de fixer cette ligne particulière?

#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); 

Répondre

1

Depuis new long[end - start + 1] renvoie un pointeur sur un bloc de mémoire, vous avez besoin d'une variable long * appropriée pour l'accepter:

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

Puisque vous utilisez new ...[], vous devez avoir une déclaration delete[] correspondant libérer la mémoire lorsque vous avez fini de l'utiliser. Ne pas oublier d'ajouter ce qui suit à la fin de merge():

delete[] temp;