티스토리 뷰

반응형

개발자의 C언어 독학 기초 # 기본 연산

모든 강의 자료 : www.codingnow.co.kr/

합병정렬

#include <stdio.h>
#include <windows.h> //system 명령 실행을 위해

//합병정렬
#define MAX_SIZE 60000    //데이터의 개수 지정
int static sorted[MAX_SIZE]; //합병정렬에서 사용할 데이터를 저장할 배열
void Merge(int var[], int left, int mid, int right)
{
    int i, j, k, l;
    i=left, j=mid+1; k=left;
 
    while(i<=mid && j<=right)
    {
        if(var[i]<=var[j]){
            sorted[k++]=var[i++];
        }else{
            sorted[k++]=var[j++];
		}
    }
 
    if(i>mid){
        for(l=j; l<=right; l++){
            sorted[k++]=var[l];
		}
    }else{
        for(l=i; l<=right; l++){
            sorted[k++]=var[l];
		}
	}
 
    for(l=left; l<=right; l++)
	{
        var[l]=sorted[l];
	}
}
void MergeSort(int var[], int left, int right)
{
    int mid;
    if(left<right)
    {
        mid=(left+right)/2;
        MergeSort(var, left, mid);
        MergeSort(var, mid+1, right);
        Merge(var,left,mid,right);
    }
}

void main(void)
{
	system("chcp 65001"); //gcc 한글 깨짐
	system("cls"); //화면지움
	
	int TargetArr[10] = { 7, 2, 3, 5, 4, 8, 6, 9, 10, 1 };
//정렬하기전 값 출력

	printf("\n정렬 전 : ");
    for (int i = 0; i < 10; i++)
    {
        printf("%d ", TargetArr[i]);
    }
	
	MergeSort(TargetArr, 0, 10);//정렬 함수 호출

    printf("\n\n");
	printf("정렬 후 : ");
    for (int i = 0; i < 10; i++)
    {
        printf("%d ", TargetArr[i]);
    }

    printf("\n\n");
	
	return;
}

 

반응형