알고리즘/기타 개념

[C++] vector 오름차순, 내림차순

천니 2021. 8. 18. 17:47
728x90

C++에서는 정렬하기 위해서는 sort() 함수를 사용한다. 

 

- sort() 함수는 퀵 소트로 구현되어 있어 빠른 속도로 정렬을 한다. 

 

- sort() 함수를 사용한다면 일반적인 배열 또한 정렬할 수 있다.

 

- 사용하기 위해서는 #include <algorithm> 을 해주어야 한다.

 

오름차순으로 정렬을 할 때는 따로 고려할 것 없이 디폴트가 오름차순이므로 sort 함수를 그냥 사용하면 된다.

 

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main()
{
	int N;
	cin >> N;
	vector<int> arr;

	for (int i = 0; i < N; i++)
	{
		int num;
		cin >> num;
		arr.push_back(num);
	}

	sort(arr.begin(), arr.end());

	for (int i = 0; i < arr.size(); i++)
	{
		cout << arr[i] << " ";
	}
}

이런 식으로 sort 함수에 넣어주면 디폴트로 오름차순이 된다. 

 

내림차순으로 정렬하고 싶을 때는 

 

1) reverse()함수로 정렬된 것을 반대로 해주면 된다. 

2) 비교함수를 만들어서 인수로 주면 된다.

 

1)의 경우는 위의 코드에서 reverse함수를 넣어주면 된다. 그러면 오름차순으로 정렬된 것을 반대로 정렬하므로 내림차순이 된다.

 

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main()
{
	int N;
	cin >> N;
	vector<int> arr;

	for (int i = 0; i < N; i++)
	{
		int num;
		cin >> num;
		arr.push_back(num);
	}

	sort(arr.begin(), arr.end());
	reverse(arr.begin(), arr.end());

	for (int i = 0; i < arr.size(); i++)
	{
		cout << arr[i] << " ";
	}
}

 

2)의 경우는 비교함수를 만들어서 인수로 주어야한다. 비교함수명은 본인이 지정해주면된다.

비교함수는 리턴형은 bool 형으로 매개변수들의 타입은 정렬하는 vector의 저장하는 값의 타입을 준다

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

bool compare(int x, int y)
{
	return x > y;
}

int main()
{
	int N;
	cin >> N;
	vector<int> arr;

	for (int i = 0; i < N; i++)
	{
		int num;
		cin >> num;
		arr.push_back(num);
	}

	sort(arr.begin(), arr.end(),compare);

	for (int i = 0; i < arr.size(); i++)
	{
		cout << arr[i] << " ";
	}
}