void splitandmerge (type aptr[], int first, int last) { if (first < last) { middle = (first + last) / 2; splitandmerge (aptr, first, middle); splitandmerge (aptr, middle+1, last); merge (aptr, first, middle, middle+1, last); } } merge (type aptr[], int leftfirst, int leftlast, int rightfirst, int rightlast) { int i = leftfirst; int j = rightfirst; int k = 0; type temp[max_list_size]; while (i <= leftlast) and (j <= rightlast) { if (aptr[i] < aptr[j]) { temp[k] = aptr[i]; I++; k++; } else { temp[k] = aptr[j]; j++; k++; } } while (i <= leftlast) { temp[k]=aptr [I]; I++; k++; } while (j <= rightlast) { temp[k]=aptr [j]; j++; k++; } for(i=leftfirst; I <=rightlast; I++) { aptr[i] = temp[i-leftfirst]; } }