#include <stdio.h>

#define I 6


  // 임시 배열은  merge가 실행되며 덮어쓰여진다. 결국엔 정렬됨



int copy[I];


void merge(int nums[],int n,int k,int max){


  


  

int i = n;

int j=k+1;    

int m = 0;

while(i<=k && j<=max){  //어디까지나, 인덱스를 바탕으로 배열에 접근하는 것 뿐이다. 

if(nums[i]<=nums[j]){

copy[m]=nums[i];      // 값이 실제로 움직이는 부분 

m++;

i++;

     

    

}

else{

copy[m]=nums[j];

j++;

m++;

}


while(i<=k){    // 왼쪽부분 마저 넣기 

copy[m]=nums[i];

i++;

     m++;

}

while(j<=max){   //오른쪽 부분 마저 넣기  

copy[m]=nums[j]; 

j++;            //실제 값들을 비교하고 임시배열에 넣음 

m++;

}

m--;

while(m>=0){

nums[m]=copy[m];

m--;

}

}



void mergesort(int nums[],int n,int max){




if (n<max){

int k=(n+max)/2;                      //좌표구하기용도 


 

mergesort(nums,n,k);

   

    mergesort(nums,k+1,max);

  

    merge(nums,n,k,max);

    

}

else{

return;

}


}




int main (void){

   

int nums[I]={5,3,7,2,9,1};


mergesort(nums,0,I-1);

for(int t=0;t<I;t++){

printf("%d",nums[t]);

}

}


이거 왜 안되는지 아는 폰노이만 계시나요?