삽입정렬
1. 삽입정렬의 개념
삽입정렬은 index 1 부터 순서대로 index 위치의 값을 앞 부분의 적당한 위치에 삽입하며 정렬하는 것이다.
그럼 7, 9, 5, 1, 3
을 오름차순으로 삽입정렬해보자.
1 단계 - index 1)
- 먼저 index 1 의 값인
9
를 따로 특정 변수에 저장해 둔 다음에, 이 기준값인9
를 기준으로 왼쪽의 값들과 비교를 한다. 비교를 했을 때 기준값보다 왼쪽에 위치한 값이 더 크다면 오른쪽으로 한 칸 복사 이동 한다.7, 9, 5, 1, 3
에서7
은9
보다 크지 않기 때문에 이동시키지 않는다.
7 9 5 1 3
2 단계 - index 2)
7, 9, 5, 1, 3
에서 index 2 의 값인5
를 따로 특정 변수에 저장해 둔 다음에, 이 기준값인5
를 기준으로 왼쪽의 값들과 비교를 한다. 먼저 index 2 의 바로 왼쪽인 index 1 의 값과 비교를 한다. index 1 의 값인9
는 기준값인5
보다 크기 때문에 오른쪽으로 한 칸 복사 이동 한다. 복사 이동을 하게 되면7, 9, 9, 1, 3
이 된다.- 그 다음, 한 칸 더 왼쪽인 index 0 의 값과 비교를 한다. index 0 의 값인
7
은 기준값인5
보다 크기 때문에 오른쪽으로 한 칸 복사 이동 한다. 복사 이동을 하게 되면7, 7, 9, 1, 3
이 된다. - 더 이상 왼쪽에 비교할 값이 없기 때문에 처음에 특정 변수에 저장해 둔 기준값
5
를 index 0 에 넣는다. 그럼5, 7, 9, 1, 3
으로 정렬이 된다.
7 9 5 1 3
7 9 9 1 3
7 7 9 1 3
5 7 9 1 3
3 단계 - index 3)
5, 7, 9, 1, 3
에서 index 3 의 값인1
을 따로 특정 변수에 저장해 둔 다음에, 이 기준값인1
을 기준으로 왼쪽의 값들과 비교를 한다. 먼저 index 3 의 바로 왼쪽인 index 2 의 값과 비교를 한다. index 2 의 값인9
는 기준값인1
보다 크기 때문에 오른쪽으로 한 칸 복사 이동 한다. 복사 이동을 하게 되면5, 7, 9, 9, 3
이 된다.- 그 다음, 한 칸 더 왼쪽인 index 1 의 값과 비교를 한다. index 1 의 값인
7
은 기준값인1
보다 크기 때문에 오른쪽으로 한 칸 복사 이동 한다. 복사 이동을 하게 되면5, 7, 7, 9, 3
이 된다. - 그 다음, 한 칸 더 왼쪽인 index 0 의 값과 비교를 한다. index 0 의 값인
5
는 기준값인1
보다 크기 때문에 오른쪽으로 한 칸 복사 이동 한다. 복사 이동을 하게 되면5, 5, 7, 9, 3
이 된다. - 더 이상 왼쪽에 비교할 값이 없기 때문에 처음에 특정 변수에 저장해 둔 기준값
1
을 index 0 에 넣는다. 그럼1, 5, 7, 9, 3
으로 정렬이 된다.
5 7 9 1 3
5 7 9 9 3
5 7 7 9 3
5 5 7 9 3
1 5 7 9 3
4 단계 - index 4)
1, 5, 7, 9, 3
에서 index 4 의 값인3
을 따로 특정 변수에 저장해 둔 다음에, 이 기준값인3
을 기준으로 왼쪽의 값들과 비교를 한다. 먼저 index 4 의 바로 왼쪽인 index 3 의 값과 비교를 한다. index 3 의 값인9
는 기준값인3
보다 크기 때문에 오른쪽으로 한 칸 복사 이동 한다. 복사 이동을 하게 되면1, 5, 7, 9, 9
가 된다.- 그 다음, 한 칸 더 왼쪽인 index 2 의 값과 비교를 한다. index 2 의 값인
7
은 기준값인3
보다 크기 때문에 오른쪽으로 한 칸 복사 이동 한다. 복사 이동을 하게 되면1, 5, 7, 7, 9
가 된다. - 그 다음, 한 칸 더 왼쪽인 index 1 의 값과 비교를 한다. index 1 의 값인
5
는 기준값인3
보다 크기 때문에 오른쪽으로 한 칸 복사 이동 한다. 복사 이동을 하게 되면1, 5, 5, 7, 9
가 된다. - 그 다음, 한 칸 더 왼쪽인 index 0 의 값과 비교를 한다. index 0 의 값인
1
은 기준값인3
보다 작기 때문에 이동 시키지 않고 처음에 특정 변수에 저장해 둔 기준값3
을 index 1 에 넣는다. 그럼1, 3, 5, 7, 9
로 정렬이 된다.
1 5 7 9 3
1 5 7 9 9
1 5 7 7 9
1 5 5 7 9
1 3 5 7 9
완료
1 3 5 7 9
2. 삽입정렬 시간복잡도
최선 | 평균 | 최악 |
---|---|---|
O(n) | O(n^2) | O(n^2) |
3. 삽입정렬 JAVA 코드
1 | // 삽입정렬 |