곽로그

[알고리즘 개념] 삽입정렬 본문

알고리즘/알고리즘개념

[알고리즘 개념] 삽입정렬

일도이동 2020. 4. 6. 21:31
반응형

개념

https://commons.wikimedia.org/wiki/File:Insertion-sort-example.gif

 n번째 인덱스를 선택한다. 그런다음 인덱스 n-1부터 인덱스 0까지 역순으로 순회하여 n번째 인덱스 값과 비교한다. n번째 인덱스 값보다 비교하는 인덱스(k)의 값이 크면, 비교하는 인덱스(k)를 인덱스 k+1로 옮긴다. 만약 인덱스(k)의 값이 작으면 인덱스 k+1자리에 인덱스 n을 삽입한다. 

 

구현

 기준값은 인덱스가 1부터 시작하고 리스트의 길이-1까지 순회한다. 기준값에 대한 비교값은 인덱스가 기준인덱스-1 부터 시작해서 0까지 역순으로 순회한다. 비교값이 기준값보다 크면 비교 인덱스+1에 비교값을 넣는다. 그러다 비교값이 기준값보다 작으면 while문을 빠져나오고 비교인덱스+1에 temp값을 넣는다. 

 

 삽입 정렬에서 핵심은 비교인덱스 +1 에 어떤 값을 넣느냐 인 것 같다. 기준값보다 비교값이 크면 비교인덱스+1에 비교값을 넣고 기준값보다 비교값이 작으면 비교인덱스+1에 기준값을 넣는다. 

코드

	public static void insertSortImprove(int[] list) {
		for(int stand =1; stand<list.length;stand++) {
			int temp = list[stand];
			int index = stand-1;
			while(index>=0 && list[index]>temp) {
				list[index+1] = list[index];
				index--;
			}
			list[index+1]=temp;
		}
	}

시간복잡도

 기준인덱스가 1일때 1번반복, 기준인덱스가 2일때 2번 반복 ... 기준인덱스가 k일때 k번반복한다. 따라서 데이터의 크기가 n인 리스트는 인덱스가 n-1까지 있으므로 1+2+3+...+n-1 , 즉 O(N^2) 

반응형

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

[알고리즘 개념] 선택정렬  (0) 2020.03.15
[알고리즘 개념] 버블정렬, 자바  (0) 2020.03.10
Comments