티스토리 뷰

algorithm

C - insertion sort

코딩하는 둥아 2020. 3. 11. 12:45
728x90

insertion sort는 한 기준점을 중심으로 오른쪽에는 unsorted list, 왼쪽에는 sorted list가 있는 형식입니다.

오른쪽의 정렬되지 않은 element를 하나씩 왼쪽으로 옮기면서 부분적으로 리스트를 정렬하고, 결론적으로 기준점이 맨 끝에 갔을때 (오른쪽에 element가 없을 때) sorting이 완료됩니다.

 

#include <stdio.h>
#include <stdlib.h>
#define max 6

int main() 
{
  // sample input: 5 12 6 80 2 15
  int key, now, temp;
  int A[] = { 5, 12, 6, 80, 2, 15};

  printf("unsorted: ");
  for(int i=0 ; i<max ; i++) {
    printf("%d ", A[i]);
  }
  printf("\n");

  // now는 기준점, temp는 비교하면서 움직이는 애, key는 A[now]를 담고있는 애!
  for(now=1 ; now<max ; now++){
  	// 전체 for문이 한 번 돌때는 오른쪽 원소가 왼쪽으로 넘어오는 과정
  	// A[now]의 값과 A[temp]의 값을 비교하면서,
    temp = now-1;
    key = A[now];
    // while문 안에는 실행 조건이 들어가야 한다는 점 주의!
    // while문의 과정을 통해 오른쪽 원소의 정확한 위치를 찾음
    // A[temp] < key : key값이 A[temp]의 값보다 크면, 더이상 이동할 필요가 없음
    // temp가 0보다 작다는 것은 key값이 A array에서 가장 작은 값임을 의미함
    while(temp>=0 && A[temp] > key) {
      A[temp+1] = A[temp];
      temp--;
    }
    A[temp+1] = key;
  }

  printf("sorted: ");
  for(int i=0 ; i<max ; i++) {
    printf("%d ", A[i]);
  }
  printf("\n");


  return 0;
}

 

728x90

'algorithm' 카테고리의 다른 글

자물쇠와 열쇠  (0) 2022.07.02
이진 탐색 Binary Search  (0) 2022.06.18
C - merge sort  (0) 2020.03.11
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함