삽입 정렬 알고리즘 - C 언어

2021. 12. 11. 13:43·C
728x90
반응형

삽입 정렬의 기본적인 연산은 데이터가 정렬되어 있을 때 이들 데이터 사이의 적당한 위치에 맞는 데이터를 삽입하는 것이다. 데이터를 삽입하고 난 뒤 그보다 오른쪽에 있던 데이터는 오른쪽으로 하나씩 자리를 옮겨줘야 한다.

 

삽입 정렬은 두 번째 데이터부터 정렬을 시작해 그 앞에 있는 데이터와 비교하고 삽입할 위치를 찾은 뒤 삽입할 위치의 공간 확보를 위해 데이터를 오른쪽으로 옮겨준 뒤 삽입하게 된다.

 

1
2
3
4
5
6
7
8
9
for(i=2 ; i<n ; i++) {
    w = a[i];
    j=i-1;
    while((w<a[j])&&(j>=0)) {
        a[j+1] = a[j];
        j = j-1;
    }
    a[j+1] = w;
}
cs

w가 삽입할 데이터이다. (a[0]은 없고 배열은 a[1]부터 시작한다고 침.)

코드만 보면 무슨 소린지 모르겠으니까 직접 데이터 배열로 정렬해보며 알아보자.

초기 상태가 [ 21  34  4  54  29  17 ]인 데이터 배열이 있다.

 

-첫번째 반복

for반복문에 들어서면 w = a[2]이므로 w=34이고,  j= i-1이므로 j=1이 된다.

while문에 들어가게 되면 w가 a[1]보다 작으면서 동시에 j가 0보다 크거나 같을 때 까지 반복을 돌게된다. 조건문을 만족시키지 못 하기 때문에 반복문을 돌지 않고 종료된다. a[j+1] = w 는 a[2] = 34로 첫번째 for문 종료. (배열상 변화 없음) [ 21  34  4  54  29  17 ]

 

-두번째 반복

두번째 반복을 돌아 i = 3일 때, w=a[3]이므로 w=4, j= 2일 때 w는 a[2]보다 작으므로 while문을 돌게 된다.

a[j+1] = a[j] 는 데이터를 오른쪽으로 옮겨주는 코드이기 때문에 a[3]에 a[2] 값을 넣어주게 된다. j=j-1이기 때문에 j=1이 된다.

여전히 while의 조건문인 w<a[1]을 만족하기 때문에 a[2] = a[1]로 데이터를 오른쪽으로 옮겨주고 j=0이 되며 while문을 빠져나온다.

마지막으로 a[j+1] = w이기 때문에 a[1] = 4로 데이터를 삽입하게 된다. 바뀐 배열은 [ 4  21  34  54  29  17 ]이 된다.

이를 반복하다보면 최종적으로 [ 4  17  21  29  34  54 ]로 오름차순으로 잘 정렬된 것을 볼 수 있다.

 

 

 

참고 : C언어로 작성하는 컴퓨터 알고리즘 / 이한출판사

728x90
반응형
저작자표시 비영리 변경금지

'C' 카테고리의 다른 글

버블 정렬 알고리즘 - C 언어  (0) 2021.12.11
단순 정렬 알고리즘 & 선택 정렬 알고리즘 - C 언어  (0) 2021.12.11
균형 이진 탐색 트리 : AVL 트리와 회전 연산 - C 언어  (0) 2021.10.18
Union-Find 알고리즘 (동치류 문제) / 크루스칼 알고리즘 - C 언어  (0) 2021.06.11
신장 트리 / 최소 비용 신장 트리 / 프림 알고리즘, 크루스칼 알고리즘 - C 언어  (0) 2021.06.10
'C' 카테고리의 다른 글
  • 버블 정렬 알고리즘 - C 언어
  • 단순 정렬 알고리즘 & 선택 정렬 알고리즘 - C 언어
  • 균형 이진 탐색 트리 : AVL 트리와 회전 연산 - C 언어
  • Union-Find 알고리즘 (동치류 문제) / 크루스칼 알고리즘 - C 언어
waVwe
waVwe
    반응형
  • waVwe
    waVwe 개발 블로그
    waVwe
  • 전체
    오늘
    어제
    • ALL (184)
      • Python (1)
      • Spring (15)
      • DevOps (10)
      • Git (6)
      • JAVA (4)
      • C (22)
      • 코테 문제 풀이 (124)
        • 프로그래머스 (43)
        • 백준 (2)
        • 정올 (64)
        • SW Expert Academy (1)
        • 온코더 oncoder (14)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

    • 🐙 Github
  • 공지사항

  • 인기 글

  • 태그

    스프링
    온코더
    형변환
    아파치카프카
    깃
    C언어
    devops
    자료구조
    프로그래머스
    docker
    자바
    알고리즘
    정올
    내일배움캠프
    CI/CD
    이진트리
    스파르타코딩클럽
    코테
    while문
    C
    springboot
    깃헙
    Til
    progate
    연결리스트
    스프링부트
    스파르타코딩
    도커
    MSA
    java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
waVwe
삽입 정렬 알고리즘 - C 언어
상단으로

티스토리툴바