/ CPP_Modules / CPP_Module_09 / ex02 / PmergeMe.hpp
PmergeMe.hpp
 1  /* ************************************************************************** */
 2  /*                                                                            */
 3  /*                                                        :::      ::::::::   */
 4  /*   PmergeMe.hpp                                       :+:      :+:    :+:   */
 5  /*                                                    +:+ +:+         +:+     */
 6  /*   By: gychoi <gychoi@student.42seoul.kr>         +#+  +:+       +#+        */
 7  /*                                                +#+#+#+#+#+   +#+           */
 8  /*   Created: 2023/12/31 17:08:24 by gychoi            #+#    #+#             */
 9  /*   Updated: 2024/01/16 21:09:03 by gychoi           ###   ########.fr       */
10  /*                                                                            */
11  /* ************************************************************************** */
12  
13  #ifndef __PMERGEME_HPP__
14  #define __PMERGEME_HPP__
15  
16  #include <algorithm>
17  #include <cstdlib>
18  #include <cstring>
19  #include <deque>
20  #include <limits>
21  #include <stdexcept>
22  #include <string>
23  #include <vector>
24  
25  struct ValuePair
26  {
27  	int	value;
28  	int	index;
29  };
30  
31  class PmergeMe
32  {
33  private:
34  	PmergeMe();
35  	PmergeMe(PmergeMe const& other);
36  	PmergeMe&	operator=(PmergeMe const& other);
37  	~PmergeMe();
38  
39  public:
40  	static std::vector<int> const&	getSequence();
41  	static void						setSequence(char** seq, int len);
42  
43  public:
44  	static void	fordJohnsonSort(std::vector<int>& v, int size, int turn = 1);
45  	static void	fordJohnsonSort(std::deque<int>& d, int size, int turn = 1);
46  
47  private:
48  	static std::vector<int>	sSequence;
49  	static std::deque<int>	sPartialJacobsthalSequence;
50  };
51  
52  template <typename T>
53  bool	isAllSorted(T const& arr)
54  {
55  	std::vector<int>	originSequence = PmergeMe::getSequence();
56  	if (originSequence.size() != arr.size())
57  	{
58  		return false;
59  	}
60  
61  	std::sort(originSequence.begin(), originSequence.end());
62  
63  	for (size_t i = 0; i < originSequence.size(); i++)
64  	{
65  		if (originSequence[i] != arr[i])
66  		{
67  			return false;
68  		}
69  	}
70  
71  	return true;
72  }
73  
74  #endif /* __PMERGEME_HPP__ */
75