거북이처럼 코딩해도 괜찮으려나
알고리즘 - 정렬 정리 본문
1. Selection Sort (선택 정렬)
<기본 원리> : n 개의 키 중에서 가장 작은 것을 찾아서 그 키와 첫째 키인 A[0]와 자리바꿈을 하고, 남은 키들을 앞과 같은 방식으로 처리.
void SelectionSort(int A[], int n) {
...
}
<시간 복잡도>
(n+1) + (n+2) + ... + 1 = n(n+1)/2
평균시간복잡도 : O(n^2)
최악시간복잡도 : O(n^2)
<제자리성>
- 제자리 정렬
-> i, j(for 문), ArraySize 등 상수 크기 메모리
<안정성>
- 불안정한 정렬
-> ex) B b a c > a b B c
2. Bubble Sort (버블 정렬)
<기본 원리> : 첫번째 키와 두번째 키 비교&스왑 -> 두번째 키와 세번째 키 비교&스왑 -> ... -> n-1번째 키와 n번째 키 비교&스왑 (이렇게 되면 마지막에 가장 큰 키가 위치하게 됨!)
이 방법을 그 다음엔 첫번째 키부터 n-1번째 키까지 비교&스왑 (더 이상 없을때 까지 반복!)
like Bubble!! 몽글몽글 인접한 키들끼리 바꾼당
// 1회차
void BubbleSort(int A[], int n) {
for(int i ; i < n ; i++){
if(A[i - 1] > A[i])
Swap(&A[i-1], &A[i]);
}
}
// Sort했는지 확인하여 시간 단축
void BubbleSort(int A[ ], int n) {
int i, Sorted;
Sorted = FALSE;
while (!Sorted) {
Sorted = TRUE;
for (i = 1; i < n; i++)
if (A[i-1] > A[i]){
Swap(&A[i-1], &A[i]);
Sorted = FALSE;}
}
}
<시간 복잡도>
(n-1)+(n-2)+ … + 1 = n(n-1)/2
최악시간복잡도 : O(n^2)
<제자리성>
- 제자리 정렬
-> i, Sorted 등 상수 크기 메모리
<안정성>
- 안정된 정렬
-> Because, 인접한 레코들끼리만 자리바꿈!
3. Insertion Sort (삽입 정렬)
<기본 원리> : 1 ~ 2번째 키까지 정렬, 1 ~ 3번째 키까지 정렬. 여기서 이제 정렬할 때는 3번째 키가 어디로 갈지 찾아간다!! -> 그렇게 1 ~ n번째 키까지 정렬하면 끝!
i번째 키가 어디로 갈지 찾아가서 Insertion(삽입)!
// 키가 1부터 저장될 때, A[0]은 더미데이터
void InsertionSort(int A[], n) {
int Value, i, j;
for (i = 2; i < n; i++)
{
Value = A[i];
j = i;
while (A[j -1] > Value)
{
A[j-1];
j--;
}
A[j] = Value;
}
}
<시간 복잡도>
평균시간복잡도 : O(n^2)
(n-1)+(n-2)+ … + 1 = n(n-1)/22+3+…+n = n(n+1)/2-1
최악시간복잡도 : O(n^2)
<제자리성>
- 제자리 정렬
-> i, j, Value 등 상수 크기 메모리
<안정성>
- 안정된 정렬
-> Because, 인접한 레코들끼리만 자리바꿈!
'코딩 > 알고리즘' 카테고리의 다른 글
004. 조이스틱 (0) | 2021.04.10 |
---|---|
003. 스킬 트리 (0) | 2021.04.09 |
002. 시저 암호 (0) | 2021.04.08 |
001. 문자열 다루기 기본 (0) | 2021.04.07 |
코딩테스트 무작정 연습해보기 (with. 프로그래머스) (0) | 2021.04.06 |