have to do_yeon

[C++] stable_sort 본문

C++/Basic (C++)

[C++] stable_sort

또김또 2022. 8. 27. 19:52
헤더파일 및 사용방법

 

헤더파일 : <algorithm>

 

stable_sort(시작점주소, 마지막점주소 +1, 함수);

#include <iostream>
#include <algorithm>

int main(){
    int arr[6] = {2,4,3,5,2,1};
    
    stable_sort(0, 5+1);
    
    for(int i = 0; i < 6; i++){
        cout<< arr[i];
    }	// 1 2 2 3 4 5
}

 

 

sort VS stable_sort

 

1. 기능적인 차이

먼저 sort를 간단하게 정리하자면, <algorithm> 헤더파일을 선언하여 오름차순으로 정렬하는 함수이다.

sort(시작점주소, 마지막점주소 +1, 함수); 형태로 사용하며, 세번째 인자 함수의 반환값에 맞게 정렬이 동작한다. (없으면 단순 오름차순 정렬) 

그런데, sort는 동일한 값의 요소들에 대해, 두 요소가 기존에 가지고 있던 순서를 보장하지 않는다.

 

그러나, stable_sort()는 동일한 값의 요소들에 대해, 두 요소가 기존에 가지고 있던 순서를 보장한다.

 

따라서, 위 예제에서 2가 중복해서 나왔다고 하더라도 첫번째 2는 정렬 전 arr[0]의 2이고, 두번째 2는 정렬 전 arr[4]의 2이다.

 

2. 시간복잡도 측면의 차이

시간복잡도의 측면에서는 퀵정렬로 정렬을 처리하는 sort()가 병합정렬(merge sort)로 정렬을 처리하는 stable_sort()보다 빠르다.
>> sort(): 평균적으로 약 O(Nlog₂(N))의 요소 비교와 최대 요소 개수만큼의 값 교환(또는 이동)을 수행한다 (N은 first와 last의 거리를 뜻한다).
>> stable_sort(): 충분한 메모리가 있다면 약 O(Nlog₂(N)), 충분한 메모리가 보장되지 않는다면 약 O(Nlog₂²(N)) 시간만큼의 요소 비교와 최대 요소 개수만큼의 값 교화을 수행한다. (N은 first와 last의 거리를 뜻한다)

참고>> https://developer-b.tistory.com/22

 

2-1. stable_sort는 예측할 수 있는 안정적인 정렬이므로, sort보다 빠르며 더 유용하게 쓰인다.

 

 

 

 

참고>>

https://developer-b.tistory.com/22

https://codingwell.tistory.com/44

'C++ > Basic (C++)' 카테고리의 다른 글

[C++] Pair  (0) 2022.08.27
[C++] 스택 (Stack)  (0) 2022.08.26
[C++] 큐(queue)  (0) 2022.08.26
[C++] 입출력 속도 향상  (0) 2022.08.09
[C / C++] ceil / floor 올림과 내림  (1) 2022.08.06
Comments