인생마린
어떤 공부 블로거의 금서목록
인생마린
전체 방문자
오늘
어제
  • 전체 (155)
    • C언어 (19)
    • Python (14)
      • Flask (0)
    • Coding Challenge (11)
      • Code Clone & Review (0)
      • Toy Project (0)
      • 오늘의 코드 (5)
    • Algorithm (6)
    • JAVA (8)
    • 웹 (8)
      • Javascript (3)
    • 정보보안 (19)
    • 기타 (21)
    • 일기는일기장에 (2)
    • 리눅스 (4)
    • 철학 (1)
    • 주식 (14)
    • AI (2)
    • 독후감 (13)
    • 프로그래밍 (4)
    • 게임 (1)
    • Devops (2)
      • CI_CD (2)
      • AWS (0)
    • Flutter (3)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 주린이 #주식
  • 불편한사회
  • Python
  • 가상화폐
  • 주식 #ETF
  • Regular Expression
  • 백테스팅
  • flask
  • 폭락
  • 비트코인
  • 카카오톡봇
  • Bitcoin
  • best of best
  • 정규표현식
  • 해커톤
  • 테라
  • python #eval #dictionary
  • Flutter
  • 코인
  • Sphinx
  • c언어
  • smtplib
  • vpn
  • Java
  • 주식 #배당주
  • turtle
  • 우영우 #패러디논란
  • Regex
  • TFT
  • 퀴즈봇

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
인생마린

어떤 공부 블로거의 금서목록

Algorithm

[정렬 알고리즘] Merge Sort(병합 정렬)

2018. 3. 14. 20:51
반응형

§Merge Sort

배열을 절반으로 두개의 서브 배열로 나누는걸 서브 배열의 원소가 한개가 될때까지 반복한 후 정렬 하며 다시 병합하는 알고리즘

 

 

mergeSort(arr[], 1, r)

If r > 1:

  1. 배열을 나눌 중간점을 구한다 : middle m = (1+r)/2
  2. mergeSort(arr, 1, m)을 호출한다.
  3. mergeSort(arr, m+1, r)을 호출한다.
  4. 두개의 정렬되어 반으로 나누어진 배열을 합병한다 : merge(arr, 1, m, r)

 

 

 Merge-Sort-Tutorial

Time Complexity : O(n*logn) //T(n) = 2T(n/2) +O(n)

Auxiliary Space: O(n)

 

 

언어 ( C )

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

////////////////////////////////

//    Merge Sort

//    병합 정렬

////////////////////////////////

 

#include <stdio.h>

#define arSIZE 7

 

void merge(int arr[], int s, int m, int d) {

    int arTmp[arSIZE];

    int i, j, k;

    i = s;

    j = m + 1;

    k = s;

 

    while (i <= m && j <= d) {

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

            arTmp[k] = arr[i];

            i++;

        }

        else {

            arTmp[k] = arr[j];

            j++;

        }

        k++;

    }

 

    if (i > m) {

        for (j; j <= d; j++, k++)

            arTmp[k] = arr[j];

    }

    else {

        for (i; i <= m; i++, k++)

            arTmp[k] = arr[i];

    }

 

    for (int n = s; n <= d; n++)

        arr[n] = arTmp[n];

}

 

void mergeSort(int arr[], int s, int d) {

    if (s < d) {

        int m = (s + d) / 2;

        mergeSort(arr, s, m);

        mergeSort(arr, m + 1, d);

        merge(arr, s, m, d);

    }

}

 

void printArray(int arr[], int size) {

    int i;

    for (i = 0; i < size; i++)

        printf("%d ", arr[i]);

    printf("\n");

}

 

int main() {

    int arr[] = { 12, 11, 13, 5, 6, 7, 10 };

 

    mergeSort(arr, 0, arSIZE - 1);

    printf("Sorted array : ");

    printArray(arr, arSIZE);

    return 0;

}

Colored by Color Scripter

cs

 


반응형
저작자표시 비영리 (새창열림)

'Algorithm' 카테고리의 다른 글

[정렬 알고리즘] Recursive Insertion Sort(재귀 삽입 정렬)  (0) 2018.03.14
[정렬 알고리즘] Insertion Sort(삽입정렬)  (0) 2018.03.14
[정렬 알고리즘] Recursive Bubble Sort(재귀 버블 정렬)  (0) 2018.03.14
[정렬 알고리즘] Bubble Sort(버블정렬, 거품정렬)  (0) 2018.03.14
[정렬 알고리즘] Seletion Sort (선택 정렬)  (0) 2018.03.14
    'Algorithm' 카테고리의 다른 글
    • [정렬 알고리즘] Recursive Insertion Sort(재귀 삽입 정렬)
    • [정렬 알고리즘] Insertion Sort(삽입정렬)
    • [정렬 알고리즘] Recursive Bubble Sort(재귀 버블 정렬)
    • [정렬 알고리즘] Bubble Sort(버블정렬, 거품정렬)
    인생마린
    인생마린
    즐거운 프로그래밍~♬

    티스토리툴바