[C++] STL 정렬 sort 함수 사용법 & 예제 (오름차순 , 내림차순)

정렬이 필요할때마다 직접 만들어서 사용할수도 있겠지만 매번 만들어서 사용하기는 번거롭습니다. 간편하게 정렬을 하고 싶다면 직접구현보다는 <algorithm> 헤더를 include하여 그 안에 있는 sort()함수를 사용하시면 간편하게 정렬을 할 수 있습니다.

 

sort() 함수는 C++ STL에서 제공하는 함수로써 각종 알고리즘 문제를 풀 때도 활용할 수 있어 자주 쓰이는데, 이 함수의 시간 복잡도는 nlogn입니다. 이 함수는 intro sort라는 정렬 방식을 바탕으로 구현되어 있는데 이 방식은 quick sort를 기반으로 heap sort와 insertion sort를 섞은 방식으로 최악의 경우 n^2의 시간 복잡도를 가지는 quick sort와는 달리, 최악의 경우에도 nlogn을 보장하는 정렬 알고리즘입니다.

 

배열의 오름차순 정렬

#include <iostream> 
#include <algorithm>
// sort()함수를 사용하기 위해 <algorithm>을 include 한다. 

using namespace std; 

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

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

사용법은 <algorithm>헤더를 include한 뒤 sort(begin,end) 이렇게 사용하면 오름차순으로 정렬됩니다. 정렬 방식이 sort(begin,end)이지만 범위가 begin <= arr <end 이기에 종료 index가 아닌 배열의 크기를 넣어주셔야 합니다.

 

Vector의 오름차순 정렬

#include <iostream> 
#include <vector>
#include <algorithm>
// sort()함수를 사용하기 위해 <algorithm>을 include 한다. 

using namespace std; 

int main(void){ 
  //정렬 대상 vector
  vector<int> arr;
  
  //vector push
  arr.push_back(3);
  arr.push_back(5);
  arr.push_back(9);
  arr.push_back(7);
  arr.push_back(8);
  arr.push_back(1);
  arr.push_back(4);
  arr.push_back(2);
  arr.push_back(10);
  arr.push_back(6);

  // 정렬
  // 첫번째 인자 = iterator의 begin()
  // 두번째 인자 = iterator의 end()
  sort(arr.begin(), arr.end()); 
 
  
  //출력
  for(int i=0; i<arr.size(); i++){
    cout << arr[i] << ' '; 
  } 
  return 0; 
}

Vecotr의 경우 begin()과 end()함수를 사용하면 편리하게 정렬할 수 있습니다.

 

내림차순 정렬

#include <iostream>
#include <algorithm>
// sort()함수를 사용하기 위해 <algorithm>을 include 한다. 

using namespace std; 

//a와 b를 비교하여, a<b의 결과를 반환한다.
bool desc(int a, int b){ 
  return a < b; 
} 

int main(void){ 

  //정렬 대상 배열
  int arr[10] = {9, 3, 5, 7, 8, 1, 2, 4, 6, 10}; 
  
  // greater 함수를 이용해서 내림차순으로 표현할 수 있다. 
  sort(arr, arr+10, desc); 
  for(int i=0; i<10; i++){ 
    cout << arr[i] << ' '; 
  } 
  
  return 0; 
}

내림차순으로 정렬을 하고 싶다면 먼저 내림차순으로 해주는 함수를 정의하고 sort() 함수의 마지막 인자값으로 넣어주면 됩니다.

댓글(0)

Designed by JB FACTORY