순간을 기록으로

[JAVA] 삽입정렬(Inserting Sort) 본문

Problem Solving

[JAVA] 삽입정렬(Inserting Sort)

luminous13 2022. 1. 7. 13:48

삽입정렬이란 현재 원소를 타깃으로 한다. 그리고 현재 원소의 이전 원소들을 비교해서 이전 원소가 크면 이전 원소를 현재 원소로 밀어준다. 그리고 이전 원소가 크지 않을 때 타깃 원소를 넣어주는 정렬 방법이다.

 

삽입 정렬 특징

  • 데이터를 비교하면서 정렬하므로 비교 정렬이다.
  • 데이터 비교할 때 추가적인 공간을 요구하지 않으므로 제자리 정렬(in-place sort)이다.

 

삽입정렬 장점

  • 제자리 정렬이라서 추가적인 메모리 소모가 적다.
  • 만약 거의 정렬된 상태라면 매우 효율적이다. 즉 최선의 경우 시간 복잡도는 O(N)
  • 안장 정렬이 가능하다. 

 

삽입정렬 단점

  • 정렬이 역순으로 되어있으면 매우 비효율적이다. 즉 최악의 경우 시간 복잡도는 O(N^2)
  • 데이터의 정렬 상태에 따라 성능 편차가 크다.

 

코드

import java.util.Scanner;

public class Main {

    public int[] insertSort(int n, int[] arr) {
        for (int i=1; i<n; i++) {   // 두 번째 원소부터 시작
            int target = arr[i];    // 타켓 설정
            int j;
            for (j=i-1; j>=0; j--) {    // j: 타겟으로 바로 앞 원소부터 비교
                if (target < arr[j]) {  // 바로 앞 원소가 타겟보다 크다면
                    arr[j+1] = arr[j];  // 앞 원소를 뒤로 민다.
                }
                else break; // 앞 원소가 타겟보다 작다면 그 앞에 있는 원소는 이미 정렬된 상태이므로 볼 필요 없다.
            }
            arr[j+1] = target;  // 마지막으로 현재 j위치에서 +1을 한 위치에 target을 넣어준다.
        }
        return arr;
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] arr = new int[n];
        for(int i=0; i<n; i++){
            arr[i] = in.nextInt();
        }
        Main T = new Main();
        for (int x : T.insertSort(n, arr)) {
            System.out.print(x + " ");
        }
    }
}

참고: https://st-lab.tistory.com/179

 

자바 [JAVA] - 삽입 정렬 (Insertion Sort)

[정렬 알고리즘 모음] 더보기 1. 계수 정렬 (Counting Sort) 2. 선택 정렬 (Selection Sort) 3. 삽입 정렬 (Insertion Sort) - [현재 페이지] 4. 거품 정렬 (Bubble Sort) 5. 셸 정렬 (Shell Sort) 6. 힙 정렬 (He..

st-lab.tistory.com

 

'Problem Solving' 카테고리의 다른 글

[JAVA] 슬라이딩 윈도우를 이용한 최대 매출  (0) 2022.01.09
[JAVA] 재귀로 구현하는 팩토리얼  (0) 2022.01.07
[JAVA] 크레인 인형뽑기  (0) 2022.01.07
[재귀] 이진수출력  (0) 2022.01.05
[정렬] 버블정렬  (0) 2022.01.05
Comments