#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int * merge(int *p,int *q,int size){
    int *b = (int *)malloc(sizeof(int)*size*2);
    int ilk=0;
    int ikinci=0;
    for(int i = 0;i<size*2;i++){
            if(p[ilk]<q[ikinci]){
                                 b[i]=p[ilk];
                                 ilk++;
            }
            else{
                 b[i]=q[ikinci];
                 ikinci++;
            }
            if(ilk>size){
                         while(ikinci<size){
                                            b[i++]=q[ikinci++];
                         }
                         return b;
            }
            if(ikinci>size){
                            while(ilk<size){
                                            b[i++]=p[ilk++];
                            }
                            return b;
            }
    }
    return b;
    
    
}
int * mergesort(int *p,int size){
    if(size<=2){
                int *q = (int *)malloc(sizeof(int)*2);
                if(p[0]>p[1]){
                              q[0]=p[1];
                              q[1]=p[0];
                              }
                else{
                     q[0]=p[0];
                     q[1]=p[1];
                }
                return q;
    }
    return merge(mergesort(p,size/2),mergesort(p+size/2,size/2),size/2);
}
void yaz (int *q,int size){
     printf("------\n");
     for(int i = 0;i<size;i++){
             printf("%d\n",q[i]);
     }
}
int main(){
  int b[]={5,3,2,8,};
  int c[]={7,9,1,18};
  int *sonuc;
  sonuc= merge(b,c,4);
  yaz (b,4);
  yaz (c,4);
  yaz(sonuc,8);
  int *a = mergesort(sonuc,8);
  yaz(a,8);
  int x[]={4,2,39,8,49,27,10,3,2,8,11,23,33,44,72,94};
  yaz(mergesort(x,16),16);
  getch();
    
}  

