본문 바로가기
스터디/자료구조

[ 자료구조 ] Merge sort

by 알 수 없는 사용자 2020. 2. 24.

합병 정렬 : 원소가 하나가 될 때까지 반으로 나눈 후 다시 합치는 정렬입니다.

 

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
int array1[10= { 19410625378 };
int array2[10];
 
void merge(int left, int right) // 병합하며 정렬한다.
{
    int mid = (left + right) / 2;
 
    int i = left;
    int j = mid + 1;
    int k = left;
    while (i <= mid && j <= right)
    {
        if (array1[i] <= array1[j])
            array2[k++= array1[i++];
        else
            array2[k++= array1[j++];
    }
 
    int tmp = i > mid ? j : i;
 
    while (k <= right) array2[k++= array1[tmp++];
 
    // 정렬된 것으로 바꾸기
    for (int i = left; i <= right; i++) array1[i] = array2[i];
}
 
void partition(int left, int right) // 분할을 재귀적으로 호출한다. 
{
    int mid;
 
    if (left < right)
    {
        mid = (left + right) / 2;
        partition(left, mid); // 왼쪽을 둘로 계속 나눈다.
        partition(mid + 1, right); // 오른쪽을 둘로 계속 나눈다.
        merge(left, right); // 그리고 다시 합친다.
    }
}
 
int main()
{
    partition(09);
 
    return 0;
}
 

 

'스터디 > 자료구조' 카테고리의 다른 글

[ 자료구조 ] Heap sort  (0) 2020.02.24
[ 자료구조 ] Quick sort  (0) 2020.02.23
[ 자료구조 ] Insertion sort  (0) 2020.02.23
[ 자료구조 ] Bubble Sort  (0) 2020.02.23
[ 자료구조 ] Selection Sort  (0) 2020.02.23