clamp
Clamp
clamp
글쓰기 관리
전체 방문자
오늘
어제
  • 분류 전체보기 (509)
    • IOS (85)
    • SwiftUI+TCA+Combine (9)
    • RxSwift + MVVM (56)
    • Clean Architecture (12)
    • SWIFT (56)
    • iOS - TDD (2)
    • 디자인패턴 (4)
    • CS (56)
      • 알고리즘 (29)
      • 운영체제 (15)
      • 자료구조 (2)
      • 네트워킹 (4)
      • 기타 (6)
    • 회고 (0)
    • Firebase (18)
    • SwiftUI (10)
    • iOS - UIKit (11)
    • iOS - 오픈소스 (6)
    • 코딩테스트 (166)
      • 프로그래머스 (164)
    • 정보처리기사 (14)
    • GitHub (2)
글쓰기 / 관리자

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • ㅅ
  • uikit
  • Q
  • Swift

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
clamp

Clamp

알고리즘 - 삽입 정렬(InsertionSort)
CS/알고리즘

알고리즘 - 삽입 정렬(InsertionSort)

2022. 4. 5. 13:41

삽입 정렬)

두 번째 원소로 시작해서 그 앞의 원소들과 비교하여 삽입할 위치를 지정한 후, 원소를 뒤로 옮기고 지정된 자리에 자로를 삽입하여 정렬하는 알고리즘.

 

 

해당 배열을 오름차순으로 정렬한다면.

 

두 번쨰 요소를 시작으로 key이전의 요소들과 비교를 한다.

 

7보단 5가 더 작으므로 7을 밀고 5를 삽입한다.

 

2번째 요소를 정렬했기 때문에 3번쨰 요소인 1을 이전 요소들과 비교 시작.

 

7보다 1이 작기때문에 7을 이동, 1을 삽입.

 

2회전의 결과이다. 이 이후로도 같은 작업을 이어간다.

2번째 요소부터 시작하지만 1번째 요소까지 계속 비교하며 N to 1 까지 비교해나간다.

 


삽입 정렬의 특징

- 배열 내에서 교환하는 방식으로, 공간복잡도는 O(1)이다. 추가적인 부분은 원소를 교환할때 사용하는 임시요소정도.

- 평균과 최악의 시간복잡도는 O(n^2)

- 삽입 정렬은 중복된 키 값의 순서가 정렬된 후에도 유지되므로 stable정렬이다.

- 선택 정렬이나 버블 정렬에 비해 상대적으로 빠르다,

 


소스코드

void insertionsort(double arr[], int N){
    int i, j, cur_el;
    for(i = 1; i < N; i++){
        j = i;
        cur_el = arr[j];
        while((i >= 1) && arr[j-1]>cur_el){
            arr[j] = arr[j-1];
            j--;
        }
        arr[j] = cur_el;
    }
}

실행결과

해당 자료는 랜덤한 데이터를 만들어서 처리한 결과이며, 시스템에 따라 다를 수 있음.

자료 개수  처리시간
10000 0.000374
100000 0.003652
1000000 0.021501
100000000 2.292645
저작자표시 비영리 동일조건 (새창열림)
    'CS/알고리즘' 카테고리의 다른 글
    • 알고리즘 - 순차탐색(Sequential Search)
    • 알고리즘 - 병합 정렬(Mearge Sort)
    • 알고리즘 - 힙 정렬(Heap Sort)
    • 알고리즘 - 쉘 정렬(Shell's Sort)
    clamp
    clamp
    주니어 iOS개발자의 발악!!!!!!!

    티스토리툴바