티스토리 뷰

Algorithm/Sort

삽입 정렬 (Insertion Sort)

기내식은수박바 2020. 12. 24. 13:33
반응형

소개

  • 현재 인덱스 위치 값과 이미 정렬된 부분 배열의 값들과 비교하여 들어갈 위치를 찾아 정렬한다.
  • 성능이 좋아 다른 알고리즘의 일부로도 사용한다.
  • 해당 삽입 지점 이후 배열 값들이 한 칸씩 밀리기 때문에 배열 길이가 길수록 효율이 떨어진다.

 

 

과정

 

 

코드

  • 첫 번째 인덱스 \(nums[i = 0]\) 의 값은 정렬되어 있다고 가정하고 시작한다.
  • compidx를 이용하여 \(i\) 인덱스의 값이 들어갈 인덱스를 정렬된 부분 배열 구간 (\(0\) ~ \(i - 1\)) 에서 찾는다.
public static void main(String[] args) {
	int[] nums = { 3, 7, 2, 5, 1, 4 };
	int len = nums.length;

	for (int i = 1; i < len; ++i) {
		int value = nums[i];
		int idx = i - 1;

		while (idx >= 0 && nums[idx] > value) {
			nums[idx + 1] = nums[idx];
			--idx;
		}

		nums[idx + 1] = value;
	}
}

 

 

결과

 

 

계산 복잡도

Time Complexity : \((N-1) + (N -2 ) + ... + 1 = \frac{(N-1)*(N)}{2}\)

  • Best : \(O(N)\) - 이미 정렬된 경우, 각 값들마다 한 번씩만 확인한다. \((1 + 1 + ... + 1 = N)\)
  • Average : \(O(N^2)\)
  • Worst : \(O(N^2)\)

Space Complexity : \(O(1)\)

반응형

'Algorithm > Sort' 카테고리의 다른 글

힙 정렬 (Heap Sort)  (2) 2020.12.24
병합 정렬 (Merge Sort)  (0) 2020.12.24
셸 정렬 (Shell Sort)  (0) 2020.12.24
선택 정렬 (Selection Sort)  (0) 2020.12.24
버블 정렬 (Bubble Sort)  (0) 2020.12.24
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함