일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- database
- Python
- visualstudio code
- error 해결
- 데이터베이스
- DataGrip
- csv
- console창
- PHPStorm
- cmd
- 클론
- Visual Studio Code
- php
- run sql script
- import data
- jupyter
- 파이썬
- error
- 따옴표 삭제
- clone
- github clone
- OrCAD 다운로드
- 에러
- MySQL
- 오류
- 단축키
- github token
- vscode
- 깃 토큰
- localhost
Archives
- Today
- Total
개발 노트
4. 삽입 정렬(Insertion Sort) 본문
ㆍ각 숫자를 적절한 위치에 삽입하는 방법.
ㆍ버블정렬이나 선택정렬같은 시간복잡도 O(n^2) 방법들중엔 제일 빠르다.
ㆍ 앞에 있는 숫자들이 이미 정렬돼있다고 가정한다.
ㆍ 앞에 있는 숫자들중에 들어갈 위치를 생각해서 들어가는 방법이다.
앞에 있는 숫자가 나보다 더 작으면 위치바꿈을 멈춘다.
최악의 경우 연산 속도는 O(n^2)이다.(반복문이 두 번 들어가있다.)
거의 정렬이 돼있는 경우에는 속도가 아주 빠르기 때문에 삽입 정렬이 가장 효율적이다.
자세한 수행 과정 :
만약 [1, 10, 5, 8, 7, 6, 4, 3, 2, 9] 의 숫자들을 오름차순으로 정렬할 때 삽입 정렬의 순서는
1. 앞에 있는 숫자들이 정렬되어 있다고 가정한다.
1은 앞으로 갈 자리가 없으니 10부터 보면
_ 1 _ 10
으로 1의 앞과 1의 뒤로 갈 수 있는데 10은 1보다 크기 때문에 그대로 있는다.
2. 그 다음 5를 보면
_ 1 _ 10 _ 5
으로 자리가 있는데 5는 10과 비교했을 때 10보다 작고, 1보다는 크기 때문에 1과 10 사이에 들어간다.
3. 이러한 방식으로 계속 진행하며 만약 6의 경우에는
_ 1 _ 5 _ 7 _ 8 _ 10 _ 6 에서
6보다 큰 값이 왼쪽에 있다면 적절한 위치에 들어간다 (10, 8, 7만 확인하여 7의 왼쪽에 들어감)
그래서 1, 5 와 같은 모든 숫자를 확인할 필요가 없다.
#include <stdio.h>
int main(void) {
int i, j, temp;
int array[10] = { 1, 10, 5, 8, 7, 6, 4, 3, 2, 9 };
for (i = 0; i < 9; i++) {
j = i;
while (j >= 0 && array[j] > array[j + 1]) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
j--;
}
}
for (i = 0; i < 10; i++) {
printf("%d ", array[i]);
}
return 0;
}
출력 결과
반응형
'알고리즘 공부 : 24.01.18~ > 1. 알고리즘 기초 정렬' 카테고리의 다른 글
7. 기초 정렬 알고리즘 문제 풀이 (0) | 2024.01.30 |
---|---|
5. 퀵 정렬(Quick Sort) 6.퀵 정렬(Quick Sort)의 구현 및 한계점 분석 (4) | 2024.01.30 |
3. 버블 정렬(Bubble Sort) (1) | 2024.01.24 |
2. 선택 정렬(Selection Sort) (2) | 2024.01.24 |
github 사이트에서 직접 폴더 생성하는 법 (0) | 2024.01.24 |