0

Problem is like in title. When I'll merge sort array with size like 1000 or 10000 or 100000 (works for a little bit higher then 500000) everything is ok. When I want to merge sort bigger array like one milion size program crushes with Core dumped. My Code is below. Thanks in advance. Where is the bug I can't see?

#include <iostream>


template<typename Var>
void merge(Var *array,int start_index, int middle_index, int end_index)
{
    Var left_array_size, right_array_size;

    left_array_size = middle_index-start_index+1;
    right_array_size = end_index-middle_index;

    Var left_array[left_array_size], right_array[right_array_size];

    //////////////////FILLING BOTH ARRAYS/////////////////////////

    for(int i=0;i<left_array_size;i++)
        {
            left_array[i]=array[start_index+i];
        }

    for(int j=0;j<right_array_size;j++)
        {
            right_array[j]=array[middle_index+1+j];
        }
    /////////////////MERGING BOTH ARRAYS TO MAIN ARRAY/////////////
    int i=0,j=0,k=start_index;
    while(i<left_array_size && j<right_array_size)
    {
        if(left_array[i]<=right_array[j])
        {
            array[k] = left_array[i];
            i++;
        }else{
            array[k] = right_array[j];
            j++;
        }
        k++;
    }

    while(i<left_array_size)
    {
        array[k] = left_array[i];
        i++;
        k++;
    }

    while(j<right_array_size)
    {
        array[k] = right_array[j];
        j++;
        k++;
    }

}

template<typename Var>
void merge_sort(Var *array,int start_index,int end_index)
{
    if( start_index < end_index )                   // do while we get 1 part of array
    {
        long int middle_index = start_index +( end_index - start_index ) / 2 ; //Calculating middle index
        merge_sort(array,start_index,middle_index);         //MergeSort for left side of array
        merge_sort(array,middle_index+1,end_index);         //MergeSort for right side of array
        merge(array,start_index,middle_index,end_index);    //When sorten then merge them into one array
    }
}


int main()
{
    std::cout<<"Array Size: ";
    int size;
    std::cin>>size;
    std::cout<<std::endl;

    int *array_for_merge_sort = new int[size];


        for (int i=0; i<size; i++)
        {
            array_for_merge_sort[i]=rand() % 100000;
        }
        std::cout<<std::endl;

    std::cout<<"AFTER MERGE SORT VVVV"<<std::endl;
    merge_sort(array_for_merge_sort,0,size-1);
    std::cout<<std::endl;


    delete [] array_for_merge_sort;
    return 0;
}



LuQ232
  • 25
  • 1
  • 6

0 Answers0