정렬, 삽입정렬(Insertion Sort)
2022. 1. 7. 11:47ㆍDataStructure
1. 삽입 정렬(Insertion Sort)
오름차순 정렬을 가정하고 n개의 데이터를 정렬한다고 가정하였을때 삽입 정렬은 다음과 같이 수행됩니다.
- arr[1]부터 arr[n]까지 배열을 순회합니다.
- 현재 데이터값을 기준으로 그 이전 위치에 존재하는 데이터값들과 비교합니다.
- 만약 기준이 되는 데이터값이 이전 위치에 존재하는 데이터값보다 작다면 값을 서로 교환합니다. 그러나 값이 크다면 비교를 종료합니다.
- 0번째 위치까지 2~3과정을 반복합니다.
위 삽입 정렬 수행과정을 그림으로 표현하면 다음과 같습니다.
2. 삽입 정렬 코드 구현
public class InsertionSort {
public static void sort(int[] arr)
{
int n = arr.length;
for(int i=1;i<n;i++)
{
int key = arr[i];
int j = i-1;
while(j>=0 && arr[j]>key)
{
arr[j+1] = arr[j];
j--;
}
arr[j+1] = key;
}
}
}
class InsertionSortTest {
@Test
void test() {
int[] arr = {5,3,2,1,4};
System.out.println(Arrays.toString(arr));
InsertionSort.sort(arr);
System.out.println(Arrays.toString(arr));
}
}
[5, 3, 2, 1, 4]
[1, 2, 3, 4, 5]
3. 삽입 정렬 시간복잡도
- Worst Case : 배열이 내림차순으로 정렬되어 있는 경우, O(n²)
- Best Case : 배열이 이미 오름차순으로 정렬되어 있는 경우, O(n)
References
[GeeksForGeeks] Insertion Sort
'DataStructure' 카테고리의 다른 글
정렬, 합병 정렬(Merge Sort) (0) | 2022.01.10 |
---|---|
정렬, 쉘 정렬(Shell Sort) (0) | 2022.01.10 |
정렬, 선택정렬(Selection Sort) (0) | 2022.01.06 |
비선형 데이터구조, RedBlackTree #3 LeftRotate & LeftRightRotate 메서드 (0) | 2022.01.04 |
비선형 데이터구조, RedBlackTree #2 add 메서드 (0) | 2021.12.30 |