ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 합병 정렬 (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

    댓글