These sorts work fine on 100000 ints but if I go much higher they will

both segmentation fault

**************************MERGESORT*************** ******

mergesort(int *a, int size) //a is pointer to the array, size is # of

elements

{

int b[(size/2)];

int c[(size-(size/2))];

int *bp;

int *cp;

int x;

int y;

bp = b;

cp = c;

if(size 1)

{

for(x = 0; x < (size/2); x++)

{

b[x] = *(a + x);

}

for(y = 0; y < (size - (size/2)); y++)

{

c[y] = *(a + x);

x++;

}

mergesort(bp, (size/2));

mergesort(cp, (size - (size/2)));

merge(a, bp, cp, size);

}

}

merge(int *a, int *b, int *c, int size)

{

int i = 0, j = 0, k = 0;

while(i < (size/2) && j < (size - (size/2)))

{

if(*(b + i) < *(c + j))

{

*(a + k) = *(b + i);

i++;

}

else

{

*(a + k) = *(c + j);

j++;

}

k++;

}

if(i == (size/2))

{

while(j < (size - (size/2)))

{

*(a + k) = *(c + j);

k++;

j++;

}

}

else

{

while(i < (size/2))

{

*(a + k) = *(b + i);

k++;

i++;

}

}

}

*******************************************

********************QUICKSORT*****************

quicksort(int *a, int size)

{

q_sort(a, 0, size - 1);

}

q_sort(int *a, int l, int r)

{

int s;

//printf("\n%d - size", (r - l));

if(l < r)

{

s = partition(a, l, r);

q_sort (a, l, s - 1);

q_sort(a, s + 1, r);

}

}

int partition(int *a, int l, int r)

{

int i, j, p;

p = *(a + l);

i = l;

j = r + 1;

while(1 < 2)

{

do ++i;

while(*(a + i) <= p && i <= r);

do --j;

while (*(a + j) p && j >=l);

if(i >= j) break;

swap(a, i, j);

}

swap(a, l, j);

return j;

}

swap(int *a, int b, int c)

{

int temp = *(a + b);

*(a + b) = *(a + c);

*(a + c) = temp;

}

**********************

here is the code I've been using to test with

******************

main()

{

int size = 100000, a[size], *ap, x;

ap = a;

time_t t0, t1;

clock_t c0, c1;

for(x = 0; x < size; x++) //set array in reverse order

{

a[x] = random()%size;

}

t0 = time(NULL);

c0 = clock();

printf("\nMergesorting\n");

mergesort(ap, size);

t1 = time(NULL);

c1 = clock();

/*for(x = 0; x < size; x++) //print contents of array

{

printf("\n%d", a[x]);

}*/

printf("\nMergesort(%d items)\nTime Difference: %f\tClock Cycle

Difference: %f\n",size, (float) (t1-t0),(float) (c1-c0));

size = 100000;

for(x = 0; x < size; x++) //set array in random order

{

a[x] = random()%size;

}

t0 = time(NULL);

c0 = clock();

quicksort(ap, size);

t1 = time(NULL);

c1 = clock();

/*for(x = 0; x < size; x++) //print contents of array

{

printf("\n -%d", a[x]);

}*/

printf("\nQuicksort(%d items)\nTime Difference: %f\tClock Cycle

Difference: %f\n",size, (float) (t1-t0),(float) (c1-c0));

}

****************************

Any idea why I'm getting seg errors?