1void intercala(int* A, int esq, int meio, int dir) {
2 int nEsq = meio-esq, nDir = dir-meio;
3 int AEsq[nEsq], ADir[nDir];
4 for (int i=0;i<nEsq;i++) AEsq[i]=A[esq+i];
5 for (int j=0;j<nDir;j++) ADir[j]=A[meio+j];
6 int i=0,j=0,k=esq;
7 while(i<nEsq&&j<nDir)
8 A[k++]=(AEsq[i]<=ADir[j])?AEsq[i++]:ADir[j++];
9 while(i<nEsq) A[k++]=AEsq[i++];
10 while(j<nDir) A[k++]=ADir[j++];
11}
12void mergeSort(int* A, int esq, int dir) {
13 if (esq < dir-1) {
14 int meio = (esq+dir)/2;
15 mergeSort(A,esq,meio);
16 mergeSort(A,meio,dir);
17 intercala(A,esq,meio,dir);
18 }
19}