2019년 4월 13일 토요일

# 병합 정렬 ( Merge sort )

 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
void MergeSort(unsigned int start, unsigned int middle, unsigned int end, int* src, int* dest) {
 
 unsigned int i = start, j = middle, k = start;
 while (i < middle && j < end) {
  if (src[i] < src[j]) {
   dest[k] = src[i];
   i++;
  }else {
   dest[k] = src[j];
   j++;
  }
  k++;
 }
 while (i < middle) dest[k++] = src[i++];
 while (j < end) dest[k++] = src[j++];
}

void Merge(unsigned int start, unsigned int end, int* src, int* dest) {
 if (start - end <= 0) return;
 unsigned int middle = (start + end) / 2;

 Merge(start, middle, src, dest);
 Merge(middle + 1, end, src, dest);

 MergeSort(start, middle, end, src, dest);
}

댓글 없음:

댓글 쓰기