본문 바로가기
둥지/알고리즘

퀵 정렬

by 까닭 2023. 2. 26.
#include <iostream>
#include <vector>

template<typename T>
class DataManager
{
public:
    DataManager() {};
    DataManager(size_t _Size)
    {
        Datas.resize(_Size);
    };

    ~DataManager() {};

    void Swap(T& _Left, T& _Right)
    {
        T Temp(_Left);

        _Left = _Right;
        _Right = Temp;
    }

    size_t Partition(size_t _Left, size_t _Right)
    {
        T Pivot = Datas[_Left];

        size_t Low = _Left;
        size_t High = _Right;

        while (Low < High)
        {
            while (Pivot < Datas[High])
            {
                --High;
            }

            while (Low < High && Pivot >= Datas[Low])
            {
                ++Low;
            }

            Swap(Datas[Low], Datas[High]);
        }

        Datas[_Left] = Datas[Low];
        Datas[Low] = Pivot;

        return Low;
    }

    //분할 정복 방식
    void QuickSort(size_t _Left, size_t _Right)
    {
        if (_Right <= _Left)
        {
            return;
        }

        size_t Pivot = Partition(_Left, _Right);

        QuickSort(_Left, Pivot - 1);
        QuickSort(Pivot + 1, _Right);
    }

    size_t Size()
    {
        return Datas.size();
    }

public:
    std::vector<T> Datas;
};

int main()
{
    DataManager<int> Manager(5);

    for (size_t i = 0; i < Manager.Size(); ++i)
    {
        std::cin >> Manager.Datas[i];
    }

    Manager.QuickSort(0, Manager.Size() - 1);

    for (size_t i = 0; i < Manager.Size(); ++i)
    {
        std::cout << Manager.Datas[i];
    }

    return 0;
}

'둥지 > 알고리즘' 카테고리의 다른 글

map 구현  (0) 2023.02.27
[프로그래머스] 컨트롤 제트  (0) 2023.02.26
버블 정렬  (0) 2023.02.25
Array, Vector 구현  (0) 2023.02.20
[백준 1992] 쿼드 트리  (0) 2023.02.20