✔️ 정렬
1. 수행 장소 별 정렬 분류
2. 시간 복잡도 별 정렬 분류
O(n²)의 시간 복잡도 (정렬할 자료의 수가 늘어나면 제곱에 비례해서 증가)
- 버블 정렬(Bubble Sort)
- 선택 정렬(Selection Sort)
- 삽입 정렬(Insertion Sort)
O(n log n)의 시간 복잡도
- 병합 정렬(Merge Sort)
- 퀵 정렬(Quick Sort)
3. 정렬 종류
1) 버블 정렬(Bubble Sort)
- 인접한 두 수를 비교하며 정렬해나가는 방법으로 O(n²)의 느린 성능
- 앞에서부터 시작하여 큰 수를 뒤로 보내 뒤가 가장 큰 값을 가지도록 완성해나가는 방법 또는 뒤에서부터 반복하여 앞의 작은 값부터 정렬을 완성해나가는 방법
2) 선택 정렬(Selection Sort)
- 한 바퀴 돌 때 가장 작은 값을 찾아 맨 앞과 교환하는 방식의 정렬.
- 앞에서부터 정렬해나가는 특성을 가지고 있음
3) 삽입 정렬(Insertion Sort)
- 정렬된 데이터 그룹을 늘려가며 추가되는 데이터는 알맞은 자리에 삽입하는 방식
- 버블 정렬과 선택 정렬과 마찬가지로 최악의 성능인 정렬 알고리즘
4) 병합 정렬(Merge Sort)
- 분할 정복과 재귀를 이용한 알고리즘으로 O(n log n)의 시간 복잡도
- 반으로 쪼개고 다시 합치는 과정에서 그룹을 만들어 정렬하게 되며 이 과정에서 2n 개의 공간이 필요
- 합쳐지는 과정
[1,4][2,3] (1과 2 비교) -> 1 선택, 완성된 배열은 [1]
[4][2,3] (4와 2 비교) -> 2 선택, 완성된 배열은 [1,2]
[4][3] (4와 3 비교) -> 3 선택, 완성된 배열은 [1,2,3]
[4][] -> 남는 4 선택, 완성된 배열은 [1,2,3,4]
5) 퀵 정렬(Quick Sort)
- 병합 정렬과 마찬가지로 분할 정복 알고리즘
- 추가적인 메모리가 공간이 필요 없음
- 병합 정렬은 균등하게 분할하였다면 퀵 정렬은 Pivot을 설정하고 그 기준으로 정렬
- 다른 정렬 알고리즘보다 빠르며 많은 언어의 정렬 내장 함수로 퀵 정렬을 수행
6) 쉘 정렬
- 자기 보다) 작은 수가 나올 때 까지 간격 만큼 우로 밀어 삽입하는 정렬
- 시간복잡도: 평균 O(N^1.5) 최악 O(N^2)
- 안정성 : 없음
- 간격은 Hn = 3 *H(n-1) + 1, n = 데이터 수
- (자기보다) 왼쪽에 작은 수가 나올 때 까지 간격 만큼 우 로 민다.
- 왼쪽 간격에 (자기 보다) 작은 수가 나오면 삽입한다.
- (반복)한다.
- 간격을 줄인다.
- 1번 부터 (반복)한다. (삽입정렬과 같으나 간격만큼 우로 민다.)
7) 분포수세기 정렬
- 정의 : 빈도를 누적분포로 저장하고 인덱스로 읽어 삽입(하는 정렬)
- 시간복잡도 : O(N)
- 안정성 : 일반적으로 있음
- 값의 빈도를 누적분포로 저장한다.
- 배열을 뒤에서 부터 읽는다.
- 새로운 배열에 빈도를 인덱스로 읽어 삽입한다.
- 빈도 수를 감소시킨다.
- 2번 부터 (반복)한다.
8) 힙 정렬
- 우선순위 큐를 이용, 다운 힙, 업 힙 연산으로 정렬
- 시간복잡도 : O(NLogN)
- 안정성 : 동일한 값에 대한 기준이 별도로 있어야 한다. 또는 동일한 값의 존재를 부정
9) 기수 교환 정렬
- 값을 비트로, 0과 1로 비교 교환 하는 유사 퀵 정렬
- 시간복잡도 : O(NLogN)
- 안정성 : 동일한 값에 대한 기준이 별도로 있어야 한다. 또는 동일한 값의 존재를 부정한다.
- 제한 : 값 들이 동일한 비트 수를 가져야 한다.
✔️ MST 알고리즘
1. MST Krusukal Algorithm
- 가장 먼저 간선들을 가중치를 기준으로 오름차순 정렬한다
- 루프 도중에 사이클을 만들지 않을 경우에만 간선을 추가한다
- 간선들의 가중치가 동일한 것이 여러개 있을 경우 결과가 달라질 수 있다.
- N개의 노드에 대해 N-1개 간선이 연결되면 종료한다.
- MST : 최소신장트리(모든 정점을 한번씩 방문)
'전공 > 그 외' 카테고리의 다른 글
[소프트웨어공학] 전공 시험 정리2 (1) | 2022.04.01 |
---|---|
[자료구조] 전공 필기 시험 정리 (0) | 2022.04.01 |
[소프트웨어공학] 전공 필기 시험 정리 (0) | 2022.03.31 |
[컴퓨터 구조] 전공 필기 시험 정리 (0) | 2022.03.31 |
[스터디 2일차]함수형 프로그래밍/ 좋은 코드란 / MVC 패턴이란 (0) | 2021.11.13 |