IT 기획의 길

삽입정렬(Insertion Sort) 본문

알고리즘(개념)

삽입정렬(Insertion Sort)

완벽하기 쉽지 않지만 완벽해지려고 노력해야 한다 2020. 12. 25. 09:15

삽입정렬: 필요할때만 적절한 위치에 삽입하는 정렬

(앞의 요소들은 정렬이 되어있다고 가정한다)

 

Java code

import java.util.*;


public class InsertionSort {
	public static void main(String[] args) {
		int i,j,temp;
		int []arr= {1,10,5,8,7,6,4,3,2,9};
		for(i=0;i<arr.length-1;i++) {
			while(arr[i]>arr[i+1]) { //앞의 원소가 뒤의 원소보다 작을때 까지 while문 실행
				temp=arr[i];
				arr[i]=arr[i+1];
				arr[i+1]=temp;
				i--;
			}
		}

		for(int k=0;k<arr.length;k++)
			System.out.print(arr[k]+" ");

	}
}

 

정렬 과정

 

1 10 5 8 7 6 4 3 2 9

 

(1)

1 (10)

1 (5) 10 

1 5 (8) 10 

1 5 (7) 8 10

1 5 (6) 7 8 10

1 (4) 5 6 7 8 10

1 (3) 4 5 6 7 8 10

1 (2) 3 4 5 6 7 8 10

1 2 3 4 5 6 7 8 (9) 10

 

삽입정렬도 최악의 상황으로는 버블정렬과 선택정렬과 마찬가지로 

10+9+8 ...+2+1=N(N+1)/2=O(N^2)의 시간복잡도를 갖는다

 

그러나 데이터가 이미 거의 정렬된 상태에서 정렬을 계속 실행하기 때문에 버블정렬보과 선택정렬보다 훨씬 빠르다 

'알고리즘(개념)' 카테고리의 다른 글

다이나믹 프로그래밍(DP)  (0) 2021.01.09
퀵정렬(Quick Sort)  (0) 2020.12.25
버블정렬(Bubble Sort)  (0) 2020.12.23