사용자 도구

사이트 도구


알고리즘:merge_sort

Merge sort

void merge(int s, int e) {
 
    if(s >= e) return;
 
    int i = s, m = (s+e)/2;
    int k = s;
    int j = m+1;
 
    merge(s, m);
    merge(m+1, e);
 
    while(i <= m && j <= e) {
        if(비교) tmp[k++] = arr[i++];
        else tmp[k++] = arr[j++];
    }
 
    while(i <= m) tmp[k++] = arr[i++];
    while(j <= e) tmp[k++] = arr[j++];
    for(int i = s; i <= e; i++) {
        arr[i] = tmp[i];
    }
 
}

int data[N] = { 3, 5, 2, 3, 1};
int main(void) {
  int N = 5;
 
  mergeSort(0, N - 1);  // 비교 부분에 data[i] < data[j]
  return 0;
}

typedef struct myNode {
  int data1;
  int data2;
} NODE;
#define N 5
NODE nodes[N];
 
int main(void) {
  nodes[0] = {3, 2};
  nodes[1] = {5, 7};
  nodes[2] = {2, 5};
  nodes[3] = {3, 4};
  nodes[4] = {1, 1};
  mergeSort(0, N-1);  // 비교 부분에 nodes[i].data1 < nodes[j].data1
  rturn 0;
}
알고리즘/merge_sort.txt · 마지막으로 수정됨: 2019/10/17 02:56 저자 trsprs