0

Its a easy sorting problem.The problem link is https://www.hackerearth.com/practice/algorithms/sorting/quick-sort/practice-problems/algorithm/kings-race-8/

When i use global array variable the program get accepted.But when i use local array variable memory limit exceeded in case 6 and runtime error in cases 8,9,10.Why this is happened? My code with local array variable:

 #include<stdio.h>
void Quick_Sort(int a[][2],int Start,int End)
{
    if(Start<End)
    {
        int Piv_pos=Partition(a,Start,End);
        Quick_Sort(a,Start,Piv_pos-1);
        Quick_Sort(a,Piv_pos+1,End);
    }
}
int Partition(int a[][2],int Start,int End)
{
    int i=Start+1,j,temp;
    int Pivot=a[Start][0];
    for(j=Start+1;j<=End;j++)
    {
        if(a[j][0]<Pivot)
        {
            temp=a[j][0];
            a[j][0]=a[i][0];
            a[i][0]=temp;
            temp=a[j][1];
            a[j][1]=a[i][1];
            a[i][1]=temp;
            i++;
        }
    }
    temp=a[Start][0];
    a[Start][0]=a[i-1][0];
    a[i-1][0]=temp;
    temp=a[Start][1];
    a[Start][1]=a[i-1][1];
    a[i-1][1]=temp;
    return i-1;
}
int min(int a,int b)
{
    if(a<b)
        return a;
    else
        return b;
}
int main()
{
    int T,i,j,N,K,prince_ind;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&N,&K);
        int a[N][2],h[K];
        for(i=0;i<N;i++)
        {
            scanf("%d",&a[i][0]);
            a[i][1]=i;
        }
        Quick_Sort(a,0,N-1);
       /* for(i=0;i<N;i++)
        {
            printf("%d ",a[i][0]);
        }*/
        for(i=0;i<K;i++)
        {
            scanf("%d",&h[i]);
        }
        for(i=0,j=0;i<K&&j<N;i++)
        {
            prince_ind=a[j][1];
            while(a[j][0]<h[i]&&j<N)
            {
               prince_ind=min(prince_ind,a[j][1]);
               j++;
            }
        }
        while(j<N)
        {
            prince_ind=min(prince_ind,a[j][1]);
            j++;
        }
        printf("%d\n",prince_ind);
    }
    return 0;
}

My code with global array variable:

 #include<stdio.h>
int a[1000000][2],h[1000000];
void Quick_Sort(int Start,int End)
{
    if(Start<End)
    {
        int Piv_pos=Partition(Start,End);
        Quick_Sort(Start,Piv_pos-1);
        Quick_Sort(Piv_pos+1,End);
    }
}
int Partition(int Start,int End)
{
    int i=Start+1,j,temp;
    int Pivot=a[Start][0];
    for(j=Start+1;j<=End;j++)
    {
        if(a[j][0]<Pivot)
        {
            temp=a[j][0];
            a[j][0]=a[i][0];
            a[i][0]=temp;
            temp=a[j][1];
            a[j][1]=a[i][1];
            a[i][1]=temp;
            i++;
        }
    }
    temp=a[Start][0];
    a[Start][0]=a[i-1][0];
    a[i-1][0]=temp;
    temp=a[Start][1];
    a[Start][1]=a[i-1][1];
    a[i-1][1]=temp;
    return i-1;
}
int min(int a,int b)
{
    if(a<b)
        return a;
    else
        return b;
}
int main()
{
    int T,i,j,N,K,prince_ind;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&N,&K);
        //int a[N][2],h[K];
        for(i=0;i<N;i++)
        {
            scanf("%d",&a[i][0]);
            a[i][1]=i;
        }
        Quick_Sort(0,N-1);
       /* for(i=0;i<N;i++)
        {
            printf("%d ",a[i][0]);
        }*/
        for(i=0;i<K;i++)
        {
            scanf("%d",&h[i]);
        }
        for(i=0,j=0;i<K&&j<N;i++)
        {
            prince_ind=a[j][1];
            while(a[j][0]<h[i]&&j<N)
            {
               prince_ind=min(prince_ind,a[j][1]);
               j++;
            }
        }
        while(j<N)
        {
            prince_ind=min(prince_ind,a[j][1]);
            j++;
        }
        printf("%d\n",prince_ind);
    }
    return 0;
}
  • 2
    Local variables are usually stored on the stack. The stack is a limited resource. On Linux the default process stack is 8MiB, on Windows it's usually only a single MiB., Now, considering that on most systems `sizeof(int) == 4`, then if you have a couple of million elements, that will be quite a lot of stack being used. – Some programmer dude Mar 24 '18 at 11:19
  • Possible duplicate of [Getting a stack overflow exception when declaring a large array](https://stackoverflow.com/questions/571945/getting-a-stack-overflow-exception-when-declaring-a-large-array) – Steve Summit Mar 24 '18 at 13:07

0 Answers0