알고리즘 11강을 보며 배운내용
오늘은 알고리즘 10강에서 알아본
버블정렬, 선택정렬, 셸 정렬보다
향상된 성능의 알고리즘을 알아본다
합병 정렬
1. 배열을 쪼개지지 않을 때까지 반으로 나누고
2. 합쳐주며 정렬
이미 4강에서 알아봤다(4강 링크)
✨ 특징
안정적 알고리즘
10강, 11강의 비교 기반 알고리즘 7개 가운데
제자리 정렬 아닌건 이녀석 하나
⌛ 시간 복잡도
O(nlogn)
퀵 정렬
1. 피벗을 중심으로 왼쪽, 오른쪽으로 나누고 정렬
⌛ 시간 복잡도
피벗 임의성 보장 하면 O(nlogn)
최악은 O(n2)
✨ 특징
제자리 정렬 알고리즘
힙 정렬
1. 일차원 배열 => 힙으로 변환
2. 힙의 최댓값 삭제
3. 힙 재구성
최대 힙: 내림차순 정렬
최소 힙: 오름차순 정렬
!! 여기선 내림차순 최대 힙 기준
힙(heap) 이란?
완전 이진 트리
각 노드의 값은 자신의 자식 노드 값보다 크거나 같다
힙의 장점
임의의 값 삽입과 최댓값 삭제가 편하다
⌛ 시간 복잡도
O(nlogn)
✨ 특징
제자리 정렬 알고리즘
힙의 구현
번호를 매겨서 일차원 배열로 구현한다
일차원 배열의 장점
1. 자식 노드 찾기 쉽다
=> 자식 노드 2i + 1, 2i + 2
2. 부모 노드찾기 쉽다
=> (i - 1) / 2
임의의 값 삽입
1. 맨 마지막에 넣고
2. 부모 값이 더 크도록 바꿔주며 자리 재배치
최댓값 삭제
1. 루트 값과 마지막 값 위치 변경(그런 다음 마지막값 무시)
2. 부모 값이 더 크도록 바꿔주며 자리 재배치
비교 기반 정렬 알고리즘
기본 성능 O(n2): 버블 정렬, 선택 정렬, 삽입 정렬 ,셸 정렬
향상된 성능 O(nlogn): 합병 정렬, 퀵 정렬, 힙 정렬
이 보다 더 좋은 비교 정렬 알고리즘 존재하나?
데이터 분포 정렬
주어진 원소 중에 자신보다 작거나 같은 값을 갖는 원소의 개수를 계산해서
정렬할 위치를 찾아서 정렬하는 방식
=> 입력값이 어떤 작은 정수 범위 내에 있다는 것을 알고 있을 때만 적용 가능
⌛ 시간 복잡도
O(n)
계수 정렬
비교 기반이 아니라 데이터 분포를 이용한 정렬
=> 입력값의 범위를 미리 알아야된다
그래서 일반적으로 사용 불가 하지만
알게되면 효과적인 알고리즘
안정적 정렬 알고리즘
빈도수에 따라 정렬을 한다는데
아직 잘 이해가 안간다
시간을 두고 친해져야겠다
'Computer Science > Algorithm :: 알고리즘' 카테고리의 다른 글
알고리즘 강의 마무리 정리 (0) | 2022.06.11 |
---|---|
알고리즘 12강 :: 순차 탐색, 이진 탐색, 이진 탐색 트리 (0) | 2022.03.31 |
알고리즘 10강 :: 버블정렬, 선택정렬, 삽입정렬, 셸정렬 (0) | 2022.03.17 |
알고리즘 9강 :: 알고리즘 목차, 분할정복, 동적프로그래밍, 욕심쟁이 (0) | 2022.03.04 |
알고리즘 8강 :: 욕심쟁이, 최단경로, 작업스케쥴, 작업 선택 (0) | 2022.03.03 |