본문 바로가기
Tech/알고리즘

삽입 정렬(Insertion Sort)

by Dog발자. 2020. 6. 1.
반응형

- 삽입 정렬

  • 비교할 값을 key로 잡고 앞쪽 부터 key값과 비교하여 key 값이 위치할 index에 값을 입력한다.
  • 선택 정렬이나 거품 정렬과 같은 O(n^2) 알고리즘에 비교하여 빠르다.
public class InsertionSort {

	/**
	 * 뒤 쪽 부터 시작하여 앞에 값들을 비교한다.
	 * @param arr
	 */
	public static void insertionSort(int[] arr)
	{

	   for(int index = 1 ; index < arr.length ; index++){

	      int temp = arr[index]; // 비교할 key값
	      int aux = index - 1; // 비교될 첫번쨰 index

	      // 비교할 index 가 없을때 까지 && 비교할 key 값이 작을때까지 계속
	      // arr[aux] > temp 부호를 바꾸면 내림차순이 된다.
	      while( (aux >= 0) && ( arr[aux] > temp ) ) {

	         arr[aux+1] = arr[aux];
	         aux--;
	         System.out.println(Arrays.toString(arr));
	      }
	      arr[aux + 1] = temp;
	   }
	   System.out.println("결과 : " + Arrays.toString(arr));
	}
	
	public static void main(String[] args) {
		int[] arr = {1 ,4, 2, 8, 10, 7, 3, 9, 5, 6};
		insertionSort(arr);
	}
}
[1, 4, 4, 8, 10, 7, 3, 9, 5, 6]
[1, 2, 4, 8, 10, 10, 3, 9, 5, 6]
[1, 2, 4, 8, 8, 10, 3, 9, 5, 6]
[1, 2, 4, 7, 8, 10, 10, 9, 5, 6]
[1, 2, 4, 7, 8, 8, 10, 9, 5, 6]
[1, 2, 4, 7, 7, 8, 10, 9, 5, 6]
[1, 2, 4, 4, 7, 8, 10, 9, 5, 6]
[1, 2, 3, 4, 7, 8, 10, 10, 5, 6]
[1, 2, 3, 4, 7, 8, 9, 10, 10, 6]
[1, 2, 3, 4, 7, 8, 9, 9, 10, 6]
[1, 2, 3, 4, 7, 8, 8, 9, 10, 6]
[1, 2, 3, 4, 7, 7, 8, 9, 10, 6]
[1, 2, 3, 4, 5, 7, 8, 9, 10, 10]
[1, 2, 3, 4, 5, 7, 8, 9, 9, 10]
[1, 2, 3, 4, 5, 7, 8, 8, 9, 10]
[1, 2, 3, 4, 5, 7, 7, 8, 9, 10]
결과 : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
반응형

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

퀵 정렬(Quick Sort)  (0) 2020.06.02
선택정렬(SelectionSort)  (0) 2020.06.01
버블정렬 (BubbleSort)  (0) 2020.06.01
2진 탐색 트리 알고리즘 (Binary Search Tree)  (0) 2020.05.26
2진 탐색 알고리즘 (Binary Search Algorithm)  (0) 2020.05.26

댓글