jusung-c
으 하기싫어
jusung-c
  • 공부 기록 (96)
    • Spring (42)
      • Spring 기초 이론 (8)
      • Spring 핵심 원리 - 기본 (9)
      • Blog 만들기 with SpringBoot (25)
    • JAVA (7)
      • Java 문법 (2)
      • 객체지향의 사실과 오해 (5)
    • Algorithm (47)
      • 자료구조 (3)
      • 완전탐색 (22)
      • 정렬 (4)
      • 이분탐색 (12)
      • 투 포인터 (4)
hELLO · Designed By 정상우.
jusung-c

으 하기싫어

[Algorithm] 정렬
Algorithm/정렬

[Algorithm] 정렬

2022. 3. 23. 05:31

류호석님의 패스트캠퍼스 강의 자료를 참고하여 정리한 글입니다.

출처 : https://github.com/rhs0266/FastCampus

 

 

정렬

어떤 자료들이 주어졌을 때 그 자료들에 대해서 오름차순 혹은 내림차순 등의 기준이 주어졌을 때 그 기준에 맞게 정렬하는 것

 

 

정렬의 조건

1. 정렬 조건이 필요

static class Elem implements Comparable<Elem> {
    public int num, idx;

    @Override
    public int CompareTo(Elem other) {
        // 오름차순 -> return 음수
        return num - other.num;
        
        // 내림차순 -> return 양수
        // return other.num - num;

        // 같은 경우 -> return 0
    }
}

return 값

  • 음수: 내가 작으니까 내가 먼저 -> 오름차순
  • 양수: 쟤(other)가 작으니까 쟤가 먼저 -> 내림차순
  • 0: 우리는 친구 -> 같은 경우

 

 

2. 시간 복잡도는 약 O(N log N)

N개의 원소를 정렬하는 것은 O(N log N) 만큼의 시간복잡도를 갖는다.

  • 예를 들어 N이 10만개일 경우 약 160만, 즉 1초 안에 충분히 연산이 가능한 것이다.

 

 

둘 다 평균 시간 복잡도가 O(N logN)으로 같지만 최악의 경우만 놓고 보면 Tim Sort가 더 안전할 테니까 Object 원소로 정렬을 하면 무조건 안전할까?

Tim Sort는 In-place하지 않기 때문에 시간이 더 걸릴 수 있으므로 그렇지 않다.

 

3. In-place / Stable 여부

  • In-place(제자리)인가?
    • N에 비해 충분히 무시할만한 개수의 메모리만큼만 추가적으로 사용하는가?
    • N이 10만개일 때 정렬 과정에서 메모리를 10개 정도만 더 쓸 경우 충분히 무시할 수 있어서 In-place하다.
      • 만약 10만개의 메모리를 더 써야한다면 무시할 수 없기에 In-place하지 않다.
  • Stable(안정) 한가?
    • 동등한 위상의 원소들의 순서 관계가 보존되는가?
    • 만약 5, 5가 입력되었고, 그것을 출력할 때 앞의 5와 뒤의 5가 순서 그대로 출력되면 Stable한 경우이다.
    • 즉, 비교가 불가능한 두 대상에 대해서 순서 관계가 입력 순 그대로 나온다면 Stable한 것이다.

 

이 복잡한 것을 깊게 알 필요는 없고 정렬시에 평균 O(N logN)의 시간이 걸린다는 것과 Primitive 원소를 정렬할 때에는 Quick Sort라서 In-place하고, Object 원소를 정렬할 때에는 TimSort라서 Stable하다는 것만 알고 있으면 된다.

 

 

정렬의 특성

1. 정렬 후에 같은 정보들은 인접해 있을 것

2. 각 원소마다 가장 가까운 원소 즉, 가장 비슷한 원소는 자신의 양 옆 중의 하나

 

 

 

 

 

 

저작자표시 비영리 변경금지 (새창열림)

'Algorithm > 정렬' 카테고리의 다른 글

BOJ 15970 - 화살표 그리기  (0) 2022.04.01
BOJ 11652 - 카드  (0) 2022.03.31
BOJ 1015 - 수열 정렬  (0) 2022.03.23
    'Algorithm/정렬' 카테고리의 다른 글
    • BOJ 15970 - 화살표 그리기
    • BOJ 11652 - 카드
    • BOJ 1015 - 수열 정렬
    jusung-c
    jusung-c

    티스토리툴바