1-3) [C]삽입정렬(Insertion Sort)

2021. 11. 2. 18:02·Algorithm/백준

1) 삽입정렬이란?

왼쪽부터 순서대로 정렬하는 방식으로 좌측에는 정렬이 끝난 숫자가 오게 되고 우측에는 아직 확인하지 않은 숫자가 남게됨

우측의 미탐색 영역엣 숫자를 하나 꺼내서 정렬이 끝난 영역의 적절한 위치에 삽입해 나가는 방식

 

1. 5를 정렬이 끝나다고 간주한다.
2. 미탐색 숫자 중에서 가장 왼쪽에 있는 2와 정렬된 5를 비교하여 더 작은 수를 왼쪽으로 보낸다.
3. 숫자 2도 정렬이 끝났다고 간주한다.
4. 같은 방식으로 3과 5를 비교하여 더 작은수를 왼쪽으로 보낸다.
5. 3보다 작은 2가 왼쪽에 있으므로 비교를 멈추고 정렬 완료로 간주한다.
6. 숫자 6보다 큰 수가 왼쪽에 없기 때문에 변경사항 없이 정렬 완료
7. 모든 숫자가 정렬될 때 까지 같은 방식으로 반복하면 정렬 완료

 

2) 삽입정렬의 시간복잡도

삽입정렬에서는 각 라운드의 첫 숫자를 그 왼쪽에 있는 숫자와 비교한다. 만약 왼쪽에 있는 숫자가 작다면 교체가 발생하지 않고 라운드를 종료한다.

하지만 꺼낸 숫자가 정렬 완료 영역의 숫자보다 작을 때는 그 숫자가 가장 왼쪽에 도착할 때까지 비교와 교체 작업을 한다. k라운드에서는 k-1회씩 작업한다. 따라서 최악의 경우에는 2라운드에서 1회, 3라운드에서 2회, ..., n라운드에서 n-1회의 비교와 교체가 발생하므로 계산 시간이 버블 정렬이나 선택 정렬과 같이  O(n^2)이다. 그리고 최악의 입력 데이터는 마찬가지로 역순으로 나열된 경우이다.

 

3) 삽입정렬 구현

#include <stdio.h>

int main(void){
  int data[6] = {5, 2, 3, 6, 4, 1};
  int keyValue;
  int j;
  printf("Before sorting :\n");
  
  for(int i =0; i<6;i++){
    printf("%d",data[i]);
  }
  printf("\n");
  for(int i=0; i<5;i++){ 
      keyValue=data[i+1];
      for(j=i;j>=0;j--){ //keyValue 앞의 숫자들 확인
          if(data[j]>keyValue){ 
              data[j+1]=data[j];
          }
          else{
              break;
          }
        }
        data[j+1]=keyValue;
    } 
        
  printf("After sorting :\n");
  for(int i=0; i<6;i++){
      printf("%d",data[i]);
  }
  
  return 0;
  }

결과화면

Before sorting :
523641
After sorting :
123456

 

 

 

반응형
'Algorithm/백준' 카테고리의 다른 글
  • 2-3) [C] 퀵정렬(Quick Sort)
  • 2-2)[C] 병합 정렬(Merge Sort)
  • 2-1) [C] 힙 정렬(Heap Sort)
  • 2-0) [C]힙(Heap)
수영하는 두루미
수영하는 두루미
한국체육대학교에서 스포츠 AI빅데이터를 공부하고 있습니다. B.S. Computer Science
  • 수영하는 두루미
    두루미의 스포츠 데이터분석실
    수영하는 두루미
  • 전체
    오늘
    어제
    • 분류 전체보기 (94)
      • 스포츠 AI·빅데이터(2024~) (21)
        • 2024-2 (0)
        • 빅데이터기반 스포츠경기분석 (10)
        • 스포츠와 소셜텍스트분석 (4)
        • 영상기반 데이터 수집기법 (3)
        • 2025-1 (0)
        • 스포츠와 AI 모델링 기초 (0)
        • 스포츠와 프로그램 코딩(Python) (0)
        • 운동역학 (0)
        • 2025-2 (0)
        • 스포츠 AI빅데이터 연구 세미나 (1)
        • 스포츠 딥러닝 (0)
        • 운동생리학 (0)
        • etc. (0)
      • Data (13)
        • ADsP (1)
        • SQLD (1)
        • 빅데이터분석기사 (4)
        • ADP(데이터분석 전문가) (5)
        • 키다리아저씨(2021.12.05~) (2)
        • 파이썬 자격과정(2021.07.22-23) (0)
      • 정보처리기사 (1)
      • CSTS (10)
      • 블록체인과 암호화폐 (0)
        • 블록체인 (0)
      • Algorithm (44)
        • 백준 (42)
        • 자료구조 (2)
      • CSOS (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    알고리즘
    스포츠데이터분석
    csts
    스포츠빅데이터
    구조기반테스트
    한체대대학원
    자료구조
    동적테스트
    경험기반테스트
    Python
    heapsort
    스포츠데이터
    명세기반테스트
    빅데이터분석기사
    데이터분석
    백준
    C언어
    한체대
    정적테스트
    스포츠ai빅데이터
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
수영하는 두루미
1-3) [C]삽입정렬(Insertion Sort)
상단으로

티스토리툴바