-
합병 정렬 (Merge Sort)언어/C, C++ 2021. 1. 27. 16:49
#pragma once class MergeSort { private: int* m_data; int m_size; public: MergeSort(int MAX = 100); ~MergeSort(); void Sort(); void Merge(int first, int middle, int last); void MergeSorting(int first, int last); void InitData(int* data); int GetSize(); int* GetData(); };
MergeSort.h
#include "MergeSort.h" MergeSort::MergeSort(int MAX) { m_data = new int[MAX]; m_size = MAX; } MergeSort::~MergeSort() { if (m_data) delete[] m_data; } void MergeSort::Sort() { int length = GetSize(); MergeSorting(0, length - 1); } void MergeSort::Merge(int first, int middle, int last) { int length = GetSize(); int* data = GetData(); int* temp = new int[length]; int first1 = first; int last1 = middle; int first2 = middle + 1; int last2 = last; int index = first1; for (; (first1 <= last1) && (first2 <= last2); index++) { if (data[first1] < data[first2]) temp[index] = data[first1++]; else temp[index] = data[first2++]; } for (; first1 <= last1; ++first1, index++) temp[index] = data[first1]; for (; first2 <= last2; ++first2, index++) temp[index] = data[first2]; for (index = first; index <= last; index++) data[index] = temp[index]; } void MergeSort::MergeSorting(int first, int last) { if (first < last) { int middle = (first + last) / 2; MergeSorting(first, middle); MergeSorting(middle + 1, last); Merge(first, middle, last); } } void MergeSort::InitData(int* data) { for (int i = 0; i < m_size; i++) m_data[i] = data[i]; } int MergeSort::GetSize() { return m_size; } int* MergeSort::GetData() { return m_data; }
MergeSort.cpp
'언어 > C, C++' 카테고리의 다른 글
[C++] List STL (0) 2021.07.16 쾌속 정렬 (Quick Sort) (0) 2021.01.27 셸 정렬 (Shell Sort) (0) 2021.01.26 삽입 정렬 (Insertion Sort) (0) 2021.01.26 버블 정렬 (Bubble Sort) (0) 2021.01.25