본문 바로가기

개인공부(c++)

[C/C++] STL sort()

정렬 공부를 하다가 문득 궁금해졌는데 매번 코딩 테스트에선 정렬 알고리즘을 사용해야하나 싶었다.

결론부터 말하면 아니다. 퀵 정렬처럼 제일 빠른 정렬을 사용해야될 것 같은 맘에 문제들을 풀때 직접 함수를 만들어 정렬해왔는데 <algorithm> 헤더 파일에 있는 STL Sort 라이브러리를 사용하면 되더라.

O(NlogN)의 시간 복잡도를 가지기 때문이다.

입력의 크기가 커질 경우 효율적으로 정렬하기 위해 진화된 정렬 방식을 사용하는데 Sort() 함수는 이에 최적화 되어있다.

 

#include <iostream> 
#include <algorithm>

using namespace std; 

int main(void){ 
  int arr[10] = {6, 2, 9, 8, 7, 1, 4, 5, 3, 10}; 
  
  // 정렬
  // 첫번째 인자 = 배열의 포인터
  // 두번째 인자 = 배열의 포인터 + 배열의 크기
  sort(arr, arr+10);

  for(int i=0; i<10; i++)
    cout << arr[i] << ' ';
    
  return 0; 
}

sort(arr, arr+10);

배열의 이름, 배열의 이름 + 크기

 

배열이 아닌 벡터인 경우에는

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

begin(), end() 함수를 이용해 주면 된다.

 

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

sort(arr, arr+10, desc);

마지막에 desc를 추가하고

크기를 비교해주는 간단한 desc 함수를 따로 만들어주자.

 

아니면

sort(arr, arr+10, greater<>());

사용 가능