개발/C++

[C++] 버블 정렬

hojak99 2017. 1. 2. 01:03

사용자가 원하는 대로 입력받고 입력받은 것을 토대로 버블 정렬하기 위해서 배열 말고 벡터를 선택했다. 배열은 길이를 유동적으로 하기 어렵지만 벡터는 쉽기 때문이다.



버블 정렬은 인접해 있는 두 개의 값을 비교해 자료 교환을 하는 것이다


오름차순 정렬 : 두 개의 값을 비교해 큰 값을 오른쪽으로 보냄

내림차순 정렬 : 두 개의 값을 비교해 작은 값을 오른쪽으로 보냄


장점 : 여러 번 값을 비교하기 때문에 안전성 있다.

 : 두 개의 값을 비교해 이동시키기 때문에 단순하다.


단점 : 다른 정렬에 비해 연산 시간이 오래 걸린다.




#include <iostream>
#include <vector>

using std::vector;

void ascending_sort(vector<int> &inputVec);
void descending_sort(vector<int> &inputVec);

int main()
{
	int value(0);
	vector<int> vec;

	std::cout << "값을 입력해주세요. 0이 입력되면 입력이 종료됩니다." << std::endl;
	
	while (true) {
		std::cin >> value;

		if (value == 0) {
			break;
		}

		vec.push_back(value);
	}

	std::cout << "입력한 수 : ";
	for (int i = 0; i < vec.size(); i++) {
		std::cout <<vec.at(i) << "  ";
	}
	std::cout <<"\n\n"<< std::endl;



	//ascending_sort(vec);
	//descending_sort(vec);

	for (int i = 0; i < vec.size(); i++) {
		std::cout << vec.at(i) << "  ";
	}

	return 0;
	
}

void ascending_sort(vector<int> &inputVec)
{
	int tmp(0);

	for (int q = 0; q < inputVec.size() - 1; ++q) {
		for (int i = 0; i < inputVec.size() - 1; ++i) {
			if (inputVec.at(i) > inputVec.at(i + 1)) {
				tmp = inputVec.at(i);
				inputVec.at(i) = inputVec.at(i + 1);
				inputVec.at(i + 1) = tmp;
			}
		}
	}
}


void descending_sort(vector<int> &inputVec)
{
	int tmp(0);

	for (int q = 0; q < inputVec.size() - 1; ++q) {
		for (int i = 0; i < inputVec.size() - 1; ++i) {
			if (inputVec.at(i) < inputVec.at(i + 1)) {
				tmp = inputVec.at(i);
				inputVec.at(i) = inputVec.at(i + 1);
				inputVec.at(i + 1) = tmp;
			}
		}
	}
}
 
반응형