합병 정렬
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define ARR_MAX 20
int sorted[ARR_MAX];
void merge(int Data[],int Left, int middle, int right){
int i = Left;
int m = Left;
int j = middle + 1;
int AAA = 0;
while(i <= middle && j <= right){
if(Data[i] <= Data[j]){
sorted[m++] = Data[i++];
}
else{
sorted[m++] = Data[j++];
}
}
if(i > middle){
for(AAA = j ; AAA <= right; AAA++){
sorted[m++] = Data[AAA];
}
}
else{
for(AAA = i ; AAA <= middle; AAA++){
sorted[m++] = Data[AAA];
}
}
for(AAA = Left; AAA <= right; AAA++){
Data[AAA] = sorted[AAA];
}
}
void merge_sort(int Data[],int Left, int right){
int middle = 0;
if(Left < right){
middle = (Left + right) / 2;
merge_sort(Data,Left,middle);
merge_sort(Data,middle+1,right);
merge(Data,Left,middle,right);
}
}
int main()
{
int arr[ARR_MAX] = { 0,};
int i =0;
char c;
srand(time(NULL));
for(i=0; i < ARR_MAX ; i++){
arr[i] = rand() % 20;
}
for(i=0; i < ARR_MAX ; i++){
printf("%3d",arr[i]);
}
printf("\n");
merge_sort(arr, 0, ARR_MAX-1);
for(i=0; i < ARR_MAX ; i++){
printf("%3d",arr[i]);
}
printf("\n");
return 0;
}