Soft Ware/자료구조 및 알고리즘

합병 정렬

달려가보자 2013. 4. 10. 10:24

#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;

}