02 정렬 알고리즘 - 삽입 정렬 (Insetion Sort)
삽입 정렬 (Insetion Sort)
자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘 입니다.
■ 정렬 방식
1. 배열의 첫 번째 요소는 정렬 된 상태라고 가정한다.
2. 배열의 두 번째 요소부터 앞에 정렬된 배열을 차례대로 비교하며 교환한다.
3. 최종적으로 자신의 위치에 맞는 위치에 삽입된다.
4. 다음 배열 요소에 대해서 같은 작업을 반복한다.
: 정렬이 완료 된 상태
: 비교되는 배열 요소들
5 | 4 | 3 | 2 | 1 |
첫 번째 배열요소는 정렬이 완료된 상태라고 가정을 합니다.
5 | 4 | 3 | 2 | 1 |
두 번째 요소부터 비교를 시작합니다. 앞에 정렬된 첫 번째 요소와 비교를 하고 4가 더 작으므로 둘의 위치를 바꿔줍니다.
4 | 5 | 3 | 2 | 1 |
다음은 3번째 배열 요소를 앞에 정렬 된 두개의 배열요소를 차례대로 비교합니다.
4 | 5 | 3 | 2 | 1 |
3번째와 2번째를 비교합니다. 3이 더 작으므로 4를 3의 위치에 옮깁니다.
3은 아직 제 위치를 찾은게 아니므로 계속 이동합니다.
3 | ||||
4 | 5 | 2 | 1 |
4와 3을 비교합니다. 3이 더 작으므로 최종적으로 첫 번째 위치에 삽입됩니다.
3 | 4 | 5 | 2 | 1 |
3번째까지 정렬이 완료된 상태입니다. 나머지 배열 요소에 대해서도 반복적으로 작업을 수행하게 되면 최종적으로 정렬이 완료 됩니다.
■ 특징
1. 비교적 작은 배열에 대해서는 효율이 좋다.
2. 시간복잡도는 O(n^2)
■ 소스코드 (Source Code)
public int[] Insertion_Sort(int[] data,int num)
{
int tmp,i,j;
for(i=1;i<data.length;i++)
{
tmp = data[i];
for(j=i-1;tmp>data[j]&&j>=0;j--)
{
data[j+1] = data[j];
}
data[j+1] = tmp;
}
return data;
}
출처 : https://lktprogrammer.tistory.com/28?category=672214
'기타 정보 > 알고리즘' 카테고리의 다른 글
06 정렬 알고리즘 - 기수 정렬(Radix Sort) (0) | 2021.12.13 |
---|---|
05 정렬 알고리즘 - 병합 정렬 (Merge Sort) (0) | 2021.12.13 |
04 정렬 알고리즘 - 퀵 정렬 (Quick Sort) (0) | 2021.12.13 |
03 정렬 알고리즘 - 버블 정렬 (Bubble Sort) (0) | 2021.12.13 |
01 정렬 알고리즘 - 선택 정렬(Selection Sort) (0) | 2021.12.13 |
[알고리즘] 분할정복 방법 - 이진 탐색, 퀵 정렬 알고리즘 (0) | 2021.04.21 |
[알고리즘] 알고리즘의 설계와 분석 - 시간 복잡도와 점근성능 (0) | 2021.04.21 |
[알고리즘] 알고리즘의 개념과 기본 자료구조 (0) | 2021.04.21 |