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;
}