C Merge Sort로 오름차순 정렬하는 방식입니다.
시간복잡도 : O(nlogn)
#include <stdio.h>
#include <stdlib.h>
void printArray(int value[], int count) {
int i = 0;
for (i = 0; i < count; i++)
printf("%d ", value[i]);
printf("\n");
}
void mergeSortInternal(int value[], int buffer[], int start, int middle, int end) {
int i, j, k, t;
i = start;
j = middle + 1;
k = start;
while (i <= middle && j <= end) {
if (value[i] <= value[j]) {
buffer[k] = value[i];
i++;
}
else {
buffer[k] = value[j];
j++;
}
k++;
}
if (i > middle) {
for (t = j; t <= end; t++, k++)
buffer[k] = value[t];
}
else {
for (t = i; t <= middle; t++, k++)
buffer[k] = value[t];
}
for (t = start; t <= end; t++)
value[t] = buffer[t];
printf("start-%d, middle-%d, end-%d, ", start, middle, end);
for (t = start; t <= end; t++)
printf("%d ", value[t]);
printf("\n");
}
void mergeSort(int value[], int buffer[], int start, int end) {
int middle = 0;
if (start < end) {
middle = (start + end) / 2;
mergeSort(value, buffer, start, middle);
mergeSort(value, buffer, middle + 1, end);
mergeSortInternal(value, buffer, start, middle, end);
}
}
int main(int argc, char *argv[]) {
int values[] = { 80, 50, 70, 10, 60, 20, 40, 30 };
int *pBuffer = NULL;
pBuffer = (int *)malloc(sizeof(values));
printf("Before mergeSort\n");
printArray(values, 8);
if (pBuffer != NULL) {
mergeSort(values, pBuffer, 0, 7);
free(pBuffer);
}
printf("\nAfter Sort\n");
printArray(values, 8);
return 0;
}
'Programming > C' 카테고리의 다른 글
Sorting(6) ShellSort(쉘 정렬) (0) | 2016.11.01 |
---|---|
Sorting(4) Quick Sort(퀵 정렬) (0) | 2016.11.01 |
Sorting(3) Selection Sort(선택 정렬) (0) | 2016.11.01 |
Sorting(2) Insertion Sort(삽입 정렬) (0) | 2016.11.01 |
Sorting(1) Bubble Sort(버블 정렬) (0) | 2016.11.01 |
WRITTEN BY