Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 방학여행
- 책 정리
- 독서
- javascript
- 이펙티브 C#
- Unity
- IOS
- 해커랭크
- 프로그래밍
- Android
- 해커랭크 문제풀이
- 일본음식
- build
- 문제풀이
- 자유여행
- 알고리즘 문제풀이
- Effective C#
- HackerRank
- 서평
- 알고리즘
- 독후감
- 책리뷰
- 정렬
- 유니티
- 빌드
- C#
- 프로그래밍도서
- 코토리
- 이펙티브 씨샵
- 개발
Archives
- Today
- Total
Console.Log
[Sort] 삽입정렬 본문
1. 소개
삽입정렬은 배열의 모든 요소를 앞부터
차례로 비교하여 자신의 위치를 찾아 정렬을 완성하는 알고리즘입니다.
2. 장점 & 단점
구현이 간단합니다.
배열이 길어질수록 효율이 떨어집니다. ( 최악의경우 n(n-1) /2, O(n²) )
3. 정렬 순서
< 조건 >
오름차순
- 정렬되지 않은 임의의 수가 있습니다.
- Key 값은 2번째부터 시작합니다.
- 그리고 자신의 앞부터 검사를 하여 조건에 맞으면 교환을 합니다.
- 조건에 맞으므로 교환!
- 다음 key 값은 4, 조건 찾기
- 조건에 맞는게 없으므로 다음 key값
- 5를 key값으로, 당연히 다없겠네 ..
- 검사중
- 마지막 key 값인 3 !
- 5보다 작으므로 교환!
- 그다음 4도 조건에 부합되므로 교환!
- 이로써 모든 부분이 오름차순으로 정렬이 끝났습니다.
4. 코드
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 32 33 34 35 36 37 38 | #include <stdio.h> // key값을 잡아 조건을 검사한뒤 조건에 맞으면 하나씩 뒤로 밀어낸다음 // 조건이 끝나면 밀어내고 남은 자리에 key 값을 넣는 형식 void InsertionSort(int data[], int dataSize, bool isAscending) { int i, j, key; for (i = 1; i < dataSize; i++) { // 키값 key = data[j = i]; while (--j >= 0 && (isAscending ? key < data[j] : key > data[j])) { data[j + 1] = data[j]; } data[j + 1] = key; } } int main() { int data[] = {2,1,4,5,3}; int dataSize = sizeof(data) / sizeof(data[0]); int i; InsertionSort(data, dataSize, true); for (int i = 0; i < dataSize; i++) { printf("%d ", data[i]); }printf("\n"); return 0; } | cs |