무작위 검은 구슬과 흰구슬이 있다. 흰구슬을 제일 앞으로 보내도록 하세요.
단, 인접 구슬만 값을 바꿀 수 있습니다.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
// 열거체로 0은 흰색, 1은 검정색
enum class Marble : unsigned int
{
white = 0,
black
};
// 기본 디폴트 파라미터를 오름차순으로
// 어떤 타입이든 다 정렬 가능
template<typename T>
void Buble_Sort(vector<T>& vector_src, bool Asending = true)
{
for (size_t i = 0; i < vector_src.size(); ++i)
{
for (size_t j = i; j < vector_src.size(); ++j)
{
// 오름차순
if (Asending && vector_src[i] > vector_src[j])
swap(vector_src[i], vector_src[j]);
// 내림차순
else if((!Asending) && vector_src[i] < vector_src[j])
swap(vector_src[i], vector_src[j]);
}
}
}
// 템플릿으로 어떤 타입이든 벡터를 사용한다면 모든 원소 출력가능
template<typename T>
inline void Print_Vector(const vector<T>& vector_src)
{
vector<T>::template const_iterator iter;
vector<T>::template const_iterator iterEnd = vector_src.end();
for (iter = vector_src.begin(); iter != iterEnd; ++iter)
{
cout << static_cast<unsigned int>(*iter) << " ";
}
cout << endl;
}
int main()
{
vector<Marble> marble_vector;
marble_vector.push_back(Marble::black);
marble_vector.push_back(Marble::black);
marble_vector.push_back(Marble::white);
marble_vector.push_back(Marble::black);
marble_vector.push_back(Marble::white);
marble_vector.push_back(Marble::black);
marble_vector.push_back(Marble::white);
marble_vector.push_back(Marble::black);
// 정렬은 sort함수로만도 가능하다.
// sort(marble_vector.begin(), marble_vector.end());
Buble_Sort<Marble>(marble_vector);
Print_Vector<Marble>(marble_vector);
// 출력 결과 : 0 0 0 1 1 1 1 1
return 0;
}
'알고리즘' 카테고리의 다른 글
<C++ 알고리즘> Factorial (0) | 2021.10.04 |
---|---|
<C++ 알고리즘> 부분 문자열 개수 (0) | 2021.10.04 |
<C++ 알고리즘> 진부분집합 구하기 (0) | 2021.10.04 |
<C++ 알고리즘> 글자 거꾸로 출력(스택활용) (0) | 2021.09.15 |
<C++ 알고리즘> 두 수의 최대공약수 출력 (0) | 2021.09.15 |