KimMinJun
Coding Note
KimMinJun
전체 방문자
오늘
어제
  • 분류 전체보기 (487)
    • ALGORITHM (11)
      • 정렬 (6)
      • 최단경로 (1)
      • 자료구조 (1)
      • 슬라이딩 윈도우 (1)
      • etc (2)
    • Git (5)
    • Web (24)
      • Vanilla JS (13)
      • TS (2)
      • React (7)
      • ETC (1)
    • React 공식문서 (번역, 공부) (11)
      • Quick Start (2)
      • Installation (0)
      • Describing the UI (9)
      • Adding Interactivity (0)
      • Managing State (0)
      • Escape Hatches (0)
    • Next.js 공식문서 (번역, 공부) (3)
      • Getting Started (2)
      • Building Your Application (1)
    • PS (432)
      • 백준 (187)
      • Programmers (105)
      • CodeUp (21)
      • STL (3)
      • 제코베 JS 100제 (50)
      • SWEA (0)
      • LeetCode (65)
    • IT (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 관리

공지사항

인기 글

태그

  • Level 1
  • tree
  • Level 0
  • Level 2
  • recursion
  • C
  • C++
  • codeup
  • 수학
  • string
  • js
  • LeetCode
  • 제코베 JS 100제
  • programmers
  • Level1
  • 그래프
  • 문자열
  • 다이나믹 프로그래밍
  • 백준
  • 정렬

최근 댓글

최근 글

hELLO · Designed By 정상우.
KimMinJun
PS/STL

sort / stable_sort

PS/STL

sort / stable_sort

2022. 1. 30. 17:44
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool compare(pair<int,int> a, pair<int,int> b) {
	return a.first < b.first;
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	
	vector<pair<int, int> > v, v2;
	v.push_back(make_pair(1,2));
	v.push_back(make_pair(4,4));
	v.push_back(make_pair(4,2));
	v.push_back(make_pair(3,2));
	v.push_back(make_pair(5,2));
	v.push_back(make_pair(7,4));
	v.push_back(make_pair(9,7));
	
	v2 = v; 
	
	cout << "<Before Sorting>";
	for(auto i : v) {
		cout << "(" << i.first << "," << i.second << ") ";
	}
	cout << '\n';
	
	sort(v.begin(), v.end(), compare);
	cout << "<After Sorting>";
	for(auto i : v) {
		cout << "(" << i.first << "," << i.second << ") ";
	}
	cout << '\n' << '\n';
	
	
	cout << "<Before Stable_Sorting>";
	for(auto i : v2) {
		cout << "(" << i.first << "," << i.second << ") ";
	}
	cout << '\n';
	
	stable_sort(v2.begin(), v2.end(), compare);
	cout << "<After Stable_Sorting>";
	for(auto i : v2) {
		cout << "(" << i.first << "," << i.second << ") ";
	}
	
	return 0;
}

위에서 sort와 stable_sort의 결과는 어떨까?

물론 결과는 같게 나온다.

 

하지만 구분되어 있는 이유는 뭘까?

이것이 다른점은 위 코드에서 (4,4)와 (4,2)를 정렬할 때 발생한다.

 

위에서 sort와 stable_sort의 정렬기준은 compare 함수를 기준으로 정렬을 하게 되는데,

첫번째 값만 비교해서 정렬을 하게 된다.

 

따라서 (4,4)와 (4,2)는 같은 값이나 다름없게 비교된다.

 

이런 값에 대해 sort는 어떤 값이 앞에 와야 하는지 불확실하다.

한마디로 "등가 요소의 상대적 위치가 보증되지 않는다." 이다.

 

stable_sort는 원래 앞에 있던 값이 계속 앞에 있게 된다.

한마디로 "등가 요소의 상대적 위치가 보증된다." 이다.

저작자표시 (새창열림)

'PS > STL' 카테고리의 다른 글

lower_bound / upper_bound  (0) 2022.02.03
set  (0) 2022.01.30
    'PS/STL' 카테고리의 다른 글
    • lower_bound / upper_bound
    • set
    KimMinJun
    KimMinJun

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.