
삽입정렬
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 | // 삽입정렬 |