본문 바로가기
Computer Science

compare 함수 사용

by OKOK 2019. 2. 25.
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
65
66
67
68
#include <algorithm>
#include <iostream>
 
using namespace std;
 
#include <stdio.h>
 
#define MAXN 10000
typedef struct Data {
    int a, b;
    bool operator < (struct Data& rhs) const {
        //return a != rhs.a ? a < rhs.a : b > rhs.b;
        if (a != rhs.a) {
            return a < rhs.a;
        }
        else {
            return b > rhs.b;
        }
    }
    bool compare(struct Data& rhs) const {
        if (a != rhs.a) {
            return a < rhs.a;
        }
        else {
            return b > rhs.b;
        }
    }
};
 
Data tmp[MAXN];
void merge(Data arr[], int start, int mid, int end) {
    int p1 = start;
    int p2 = mid;
    int k = start;
    while (p1 < mid && p2 < end) {
        //if (arr[p1] < arr[p2]) tmp[k++] = arr[p1++];
        if (arr[p1].compare(arr[p2])) tmp[k++= arr[p1++];
        else tmp[k++= arr[p2++];
    }
    while (p1 < mid) tmp[k++= arr[p1++];
    while (p2 < end)  tmp[k++= arr[p2++];
    for (int i = start; i < end; i++) {
        arr[i] = tmp[i];
    }
}
void merge_sort(Data arr, int start, int end) {
    int mid = (start + end/ 2;
    if (start < mid) {
        merge_sort(arr, start, mid);
        merge_sort(arr, mid, end);
        merge(arr, start, mid, end);
    }
}
int main() {
    Data arr[MAXN];
    int i = 0;
    arr[i++= { 26 };
    arr[i++= { 16 };
    arr[i++= { 63 };
    arr[i++= { 104 };
    arr[i++= { 76 };
 
    merge_sort(arr, 0, i);
 
    printf(";");
}
 
 
cs

 


'Computer Science' 카테고리의 다른 글

파이의 합 아메리칸 조식  (0) 2019.03.05
줄 세우기 아메리칸 조식  (0) 2019.03.05
롤러코스터  (0) 2019.02.25
가능한 시험 점수  (0) 2019.02.19
문제 풀이  (0) 2019.02.19

댓글