일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- pwnable.kr
- Java
- 미로 탐색 알고리즘
- 시간복잡도
- ftz
- Stack
- 자료구조
- windosws wbcs
- c언어
- 스택
- 파이썬
- War Game
- 큐
- 암호수학
- C
- LoB
- 파일 시스템
- web
- 정렬 알고리즘
- SWiFT
- OSI
- PHP
- 재귀
- ftz level13
- HTML
- level13
- 백준
- windosw 문자열
- System
- 두근두근 자료구조
Archives
- Today
- Total
나의 기록, 현진록
[C] <자료구조> 삽입 정렬 알고리즘 insertion sort 시간 복잡도 본문
Programming/Algorithm & Data Structure
[C] <자료구조> 삽입 정렬 알고리즘 insertion sort 시간 복잡도
guswlsdk 2018. 3. 27. 01:24반응형
삽입 정렬
삽입 정렬은 한 번에 한 항목씩 최종 정렬된 배열에서 자신의 위치를 찾아 삽입함으로 정렬을 완성하는 알고리즘이다.
시간 복잡도는 평균 O(n2)으로 퀵 정렬이나, 힙 정렬 또는 병합 정렬과 같은 고급 알고리즘보다 큰 목록에서 비효율적이다.
시간 복잡도의 최상은 O(n), 최악은 O(n2)이다.
다음 영상은 삽입 정렬의 동작 방식이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <stdio.h> void insertion_sort(int arr[], int len) { for (int i = 1; i < len; i++) { int key = arr[i]; int j; for (j = i - 1; j >= 0 && key < arr[j]; j--) { arr[j + 1] = arr[j]; } arr[j+1] = key; } } int main() { int arr[] = { 9,1,8,4,3,5,2 }; int len = sizeof(arr) / sizeof(int); //배열의 길이 insertion_sort(arr, len); for (int i = 0; i < len; i++) { printf("%d ", arr[i]); } } | cs |
반응형
'Programming > Algorithm & Data Structure' 카테고리의 다른 글
[C] <BAEKJOON> 백준 1712번 : 손익분기점 (0) | 2020.11.16 |
---|---|
[C] <암호수학> 확장 유클리드 알고리즘 (0) | 2018.04.02 |
[C] <자료구조> 선택 정렬 알고리즘 selection sort 시간 복잡도 (0) | 2018.03.27 |
[C] <자료구조> 버블정렬 알고리즘 bubble sort 시간 복잡도 (0) | 2018.03.27 |
[C] <암호 수학> 단일 치환 암호 복호화 카이사르, 시저 (0) | 2018.03.15 |