void MergeSort( int arg[], int left, int right) {
int mid;
if ( left < right ) {
mid = ( left + right ) / 2;
MergeSort(arg, left, mid);
MergeSort(arg, mid + 1, right);
Merge(arg, left, mid+1, right);
}
}
// 병합정렬 병합/합병 함수
void Merge(int arr[], int left, int mid, int right) {
int temp[10] = { 0, };
int index = left;
int low = left;
int high = mid;
while ((low < mid) && (high <= right)) {
if (arr[low] < arr[high]) {
temp[index] = arr[low];
low++;
}
else {
temp[index] = arr[high];
high++;
}
index++;
}
if (low < mid) {
for (low = low; low < mid; low++, index++) { // 앞쪽 배열에 남은것 모두 가져오기
temp[index] = arr[low];
}
}
if (high <= right) {
for (mid = high; mid <= right; mid++, index++) { // 뒤쪽 배열에 남은것 모두 가져오기
temp[index] = arr[mid];
}
}
for (index = left; index <= right; index++) {
arr[index] = temp[index];
}
Display(arr, 10);
}
분할 정복 방법
O(nlogn)
적절한 원소 하나를 기준으로 기준보다 작은 것, 큰 것으로 나눈다.
// 퀵 정렬 함수
void QuickSort(int arg[], int left, int right) {
int pivot = 0;
if (left <= right) {
pivot = QuickPartition(arg, left, right); // 퀵 분할
QuickSort(arg, left, pivot - 1); // 피벗보다 왼쪽 영역 정렬
QuickSort(arg, pivot + 1, right); // 피벗보다 오른쪽 영역 정렬
}
}