본문 바로가기

알고리즘/알고리즘 이론

삽입 정렬

https://www.youtube.com/watch?v=16I9Z7bS1iM&list=PLRx0vPvlEmdDHxCvAQS1_6XV4deOwfVrz&index=4

https://m.blog.naver.com/ndb796/221226806398

 

4. 삽입 정렬(Insertion Sort)

지난 시간까지 선택 정렬과 버블 정렬에 대해 알아보았습니다. 앞서 다룬 정렬 알고리즘 모두 시간 복잡도 ...

blog.naver.com

 

삽입 정렬은 각 숫자를 적절한 위치에 삽입하는 방법이다.

검사하면서 비교에 따라 필요할 때만 위치를 바꾼다.

 

#include <iostream>
using namespace std;

int main(void)
{
  int i, j, tmp;
  int arr[10]={1,10,5,8,7,6,4,3,2,9};
  for(i=0; i<9; i++)
  {
    j=i;
    while(j>=0 && arr[j]<arr[j+1])
    {
      tmp=arr[j];
      arr[j]=arr[j+1];
      arr[j+1]=tmp;
      j--;
    }
  }

  for(i=0; i<10; i++)
  {
    cout << arr[i] << ' ';
  }
  return 0;
}

j는 검사자라고 생각하자. whlie에서 arr[j]<arr[j+1]에 따라 두 개의 값을 비교하고 두 번째 값이 크면 스와핑을 진행한다.

이때 j 값이 주어지고 while을 빠져나올때마다 j는 커진다. 따라서 검사하는 범위도 점점 커지는 것이다. 

이에 따라 j--는 i로 인해 커지는 j값을 while문 안에서 다시 줄여줌으로써 처음부분까지 검사를 진행하도록 한다.

'알고리즘 > 알고리즘 이론' 카테고리의 다른 글

퀵 정렬  (0) 2020.06.09
버블 정렬  (0) 2020.06.08
선택 정렬  (0) 2020.06.06