편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
최신판 | 당신의 편집 | ||
5번째 줄: | 5번째 줄: | ||
<syntaxhighlight lang='c'> | <syntaxhighlight lang='c'> | ||
#include <stdio.h> | #include <stdio.h> | ||
void | #include <stdlib.h> | ||
int | int a[1000000]; | ||
void Merge(int arr[], int StartInd, int MiddleInd, int EndInd){ | |||
int FirInd = StartInd, SecInd = MiddleInd+1, ResInd=0; | |||
int * Res = (int*)malloc(sizeof(int) * (EndInd - StartInd+1)); | |||
int | while(FirInd <= MiddleInd && SecInd <= EndInd){ | ||
if(arr[FirInd]<arr[SecInd]){ // 오름차순 일 경우 | |||
Res[ResInd++]=arr[FirInd++]; | |||
} | |||
else{ | |||
while( | Res[ResInd++]=arr[SecInd++]; | ||
if( | } | ||
else { | |||
} | } | ||
while( | while(FirInd<=MiddleInd){ | ||
Res[ResInd++]=arr[FirInd++]; | |||
} | |||
while(SecInd<=EndInd){ | |||
Res[ResInd++]=arr[SecInd++]; | |||
} | |||
ResInd = 0; | |||
for(int i = StartInd;i<=EndInd;i++){ | |||
arr[i]=Res[ResInd++]; | |||
} | |||
free(Res); | |||
} | |||
void MergeSort(int arr[], int StartInd, int EndInd){ | |||
int MiddleInd; | |||
if(EndInd - StartInd <1)return; | |||
MiddleInd=(StartInd + EndInd)/2; | |||
MergeSort(arr,StartInd,MiddleInd); | |||
MergeSort(arr,MiddleInd + 1,EndInd); | |||
Merge(arr,StartInd,MiddleInd,EndInd); | |||
} | } | ||
int main() { | int main(){ | ||
int | int n; | ||
int | scanf("%d",&n); | ||
for(int i=0;i<n;i++){ | |||
for(int i=0; i< | scanf("%d",&a[i]); | ||
} | |||
MergeSort(a,0,n-1); | |||
for(int i=0;i<n;i++){ | |||
printf("%d\n",a[i]); | |||
} | |||
return 0; | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> |