코딍코딍
코딩기록
코딍코딍
전체 방문자
오늘
어제
  • 분류 전체보기 (271)
    • 개발 (2)
    • Java (1)
    • 스프링 (28)
    • JPA (11)
    • Git (3)
    • 알고리즘 (160)
      • 백준 (132)
      • 프로그래머스 (8)
      • SWEA (20)
    • 토이 프로젝트 (14)
      • 간단한 Springboot CRUD (1)
      • 게시판 프로젝트 (13)
    • 알고리즘 개념정리 (8)
    • 오류 해결 (13)
    • 보류 (0)
    • AWS (5)
    • 트러블 슈팅 (0)
    • 회고 (3)
    • CS (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

최근 글

티스토리

hELLO · Designed By 정상우.
코딍코딍

코딩기록

알고리즘 개념정리

삽입 정렬

2022. 8. 1. 11:58

삽입 정렬

처리되지 않은 데이터를 하나씩 골라 적절한 위치에 삽입한다

선택 정렬에 비해 구현 난이도가 높은 편이지만, 일반적으로 더 효율적으로 동작한다.

삽입 정렬은 현재 리스트의 데이터가 거의 정렬되어 있는 상태라면 매우 빠르게 동작한다.

  • 최선의 경우 O(N)

시간 복잡도: O(n^2)

 

 

구현 과정

0) 첫 번째 데이터 '7'은 그 자체로 정렬이 되어 있다고 판단하고, 두 번째 데이터인 '5'가 어떤 위치로
들어갈지 판단한다. '7'의 왼쪽으로 들어가거나 오른쪽으로 들어가거나 두 경우만 존재한다.

1) 이어서 '9'가 어떤 위치로 들어갈지 판단한다.

2) 이어서 '0'이 어떤 위치로 들어갈지 판단한다.

3) 이어서 '3'이 어떤 위치로 들어갈지 판단한다.

4) 이러한 과정을 반복하며 정렬이 완료된다.

 

 

예제 코드

import java.util.*;
 
public class Main {
    public static void main(String[] args) {
        int n = 10;
        int[] arr = {7, 5, 9, 0, 3, 1, 6, 2, 4, 8};
 
        for (int i = 0; i < n; i++) {
            // 인덱스 i 부터 1까지 감소하며 반복하는 문법
            for (int j = i; j > 0; j--) {
                if (arr[j] < arr[j - 1]) {
                    // swap
                    int temp = arr[j];
                    arr[j] = arr[j - 1];
                    arr[j - 1] = temp;
                } else {
                    // 자기보다 작은 데이터를 만나면 그 위치에서 멈춤
                    break;
                }
            }
        }
 
        for(int i = 0; i < n; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}

 

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

이진 탐색  (0) 2022.08.01
퀵 정렬  (0) 2022.08.01
선택 정렬  (0) 2022.07.31
BFS (Breadth-First Search)  (0) 2022.07.30
DFS (Depth-First Search)  (0) 2022.07.30
    '알고리즘 개념정리' 카테고리의 다른 글
    • 이진 탐색
    • 퀵 정렬
    • 선택 정렬
    • BFS (Breadth-First Search)
    코딍코딍
    코딍코딍
    ㅎ2

    티스토리툴바