๐Ÿšฉ[Algorithm] 1. ์ •๋ ฌ - ์‚ฝ์ž… ์ •๋ ฌ

NtoZยท2023๋…„ 3์›” 27์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
2/3
post-thumbnail

์‚ฝ์ž…์ •๋ ฌ


์‚ฝ์ž… ์ •๋ ฌ(Insertion Sort)

0. ๊ฐœ์š”

  • โญ๋‘ ๋ฒˆ์งธ ์›์†Œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๊ทธ ์•ž์˜ ์›์†Œ๋“ค๊ณผ ๋น„๊ตํ•˜์—ฌ ์‚ฝ์ž…ํ•  ์œ„์น˜๋ฅผ ์ง€์ •ํ•œ ํ›„, ์›์†Œ๋ฅผ ๋’ค๋กœ ์˜ฎ๊ธฐ๊ณ  ์ง€์ •๋œ ์ž๋ฆฌ์— ์ž๋ฃŒ๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ์˜ค๋ฆ„์ฐจ์ˆœ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ.
  • ๋งŒ์•ฝ, ๋‚ด๋ฆผ์ฐจ์ˆœ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋ถ€๋“ฑํ˜ธ ๋ฐ˜๋Œ€๋ฐฉํ–ฅ

1. ์‚ฝ์ž… ์ •๋ ฌ(Insertion Sort)์ด๋ž€?

  • ์† ์•ˆ์˜ ์นด๋“œ๋ฅผ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์œ ์‚ฌ
    - ์ƒˆ๋กœ์šด ์นด๋“œ๋ฅผ ๊ธฐ์กด์˜ ์ •๋ ฌ๋œ ์นด๋“œ ์‚ฌ์ด์˜ ์˜ฌ๋ฐ”๋ฅธ ์ž๋ฆฌ์— ์‚ฝ์ž…
    - ์ƒˆ๋กœ ์‚ฝ์ž…๋  ์นด๋“œ์˜ ์ˆ˜๋งŒํผ ๋ฐ˜๋ณตํ•˜๊ฒŒ ๋˜๋ฉด ์ „์ฒด ์นด๋“œ ์ •๋ ฌ๋จ
  • ์ž๋ฃŒ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์•ž์—์„œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ฐฐ์—ด ๋ถ€๋ถ„๊ณผ ๋น„๊ตํ•˜์—ฌ, ์ž์‹ ์˜ ์œ„์น˜๋ฅผ ์ฐพ์•„ ์‚ฝ์ž…ํ•จ์œผ๋กœ์จ ์ •๋ ฌ์„ ์™„์„ฑ
  • ๋งค ์ˆœ์„œ๋งˆ๋‹ค ํ•ด๋‹น ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜๋ฅผ ์ฐพ์•„ ํ•ด๋‹น ์œ„์น˜์— ๋„ฃ๋Š”๋‹ค.

2. ์‚ฝ์ž… ์ •๋ ฌ(insertion sort)์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ตฌ์ฒด์  ๊ฐœ๋…

  • โญ์‚ฝ์ž… ์ •๋ ฌ์€ ๋‘ ๋ฒˆ์งธ ์ž๋ฃŒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๊ทธ ์•ž(์™ผ์ชฝ)์˜ ์ž๋ฃŒ๋“ค๊ณผ ๋น„๊ตํ•˜์—ฌ ์‚ฝ์ž…ํ•  ์œ„์น˜๋ฅผ ์ง€์ •ํ•œ ํ›„ ์ž๋ฃŒ๋ฅผ ๋’ค๋กœ ์˜ฎ๊ธฐ๊ณ  ์ง€์ •ํ•œ ์ž๋ฆฌ์— ์ž๋ฃŒ๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜.
  • ์ฆ‰, ๋‘ ๋ฒˆ์งธ ์ž๋ฃŒ๋Š” ์ฒซ ๋ฒˆ์งธ ์ž๋ฃŒ, ์„ธ ๋ฒˆ์งธ ์ž๋ฃŒ๋Š” ๋‘ ๋ฒˆ์งธ์™€ ์ฒซ ๋ฒˆ์งธ ์ž๋ฃŒ, ๋„ค ๋ฒˆ์งธ ์ž๋ฃŒ๋Š” ์„ธ ๋ฒˆ์งธ, ๋‘ ๋ฒˆ์งธ, ์ฒซ ๋ฒˆ์งธ ์ž๋ฃŒ์™€ ๋น„๊ตํ•œ ํ›„ ์ž๋ฃŒ๊ฐ€ ์‚ฝ์ž…๋  ์œ„์น˜๋ฅผ ์ฐพ๋Š”๋‹ค. โญ์ž๋ฃŒ๊ฐ€ ์‚ฝ์ž…๋  ์œ„์น˜๋ฅผ ์ฐพ์•˜๋‹ค๋ฉด ๊ทธ ์œ„์น˜์— ์ž๋ฃŒ๋ฅผ ์‚ฝ์ž…ํ•˜๊ธฐ ์œ„ํ•ด ์ž๋ฃŒ๋ฅผ ํ•œ ์นธ์”ฉ ๋’ค๋กœ ์ด๋™์‹œํ‚จ๋‹ค.

3. ์‚ฝ์ž… ์ •๋ ฌ(insertion sort) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์˜ˆ์ œ

  • ๋ฐฐ์—ด์— 8, 5, 6, 2, 4๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์ž๋ฃŒ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด๋ณด๊ธฐ.

4. ์‚ฝ์ž… ์ •๋ ฌ(insertion sort) ์ฝ”๋“œ

1. C์–ธ์–ด

# include <stdio.h>
# define MAX_SIZE 5

// ์‚ฝ์ž… ์ •๋ ฌ
void insertion_sort(int list[], int n){
  int i, j, key;

  // ์ธํ…์Šค 0์€ ์ด๋ฏธ ์ •๋ ฌ๋œ ๊ฒƒ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  for(i=1; i<n; i++){
    key = list[i]; // ํ˜„์žฌ ์‚ฝ์ž…๋  ์ˆซ์ž์ธ i๋ฒˆ์งธ ์ •์ˆ˜๋ฅผ key ๋ณ€์ˆ˜๋กœ ๋ณต์‚ฌ

    // ํ˜„์žฌ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์€ i-1๊นŒ์ง€์ด๋ฏ€๋กœ i-1๋ฒˆ์งธ๋ถ€ํ„ฐ ์—ญ์ˆœ์œผ๋กœ ์กฐ์‚ฌํ•œ๋‹ค.
    // j ๊ฐ’์€ ์Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ์–ด์•ผ ๋˜๊ณ 
    // key ๊ฐ’๋ณด๋‹ค ์ •๋ ฌ๋œ ๋ฐฐ์—ด์— ์žˆ๋Š” ๊ฐ’์ด ํฌ๋ฉด j๋ฒˆ์งธ๋ฅผ j+1๋ฒˆ์งธ๋กœ ์ด๋™
    for(j=i-1; j>=0 && list[j]>key; j--){
      list[j+1] = list[j]; // ๋ ˆ์ฝ”๋“œ์˜ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™
    }

    list[j+1] = key;
  }
}

void main(){
  int i;
  int n = MAX_SIZE;
  int list[n] = {8, 5, 6, 2, 4};

  // ์‚ฝ์ž… ์ •๋ ฌ ์ˆ˜ํ–‰
  insertion_sort(list, n);

  // ์ •๋ ฌ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
  for(i=0; i<n; i++){
    printf("%d\n", list[i]);
  }
}
//https://gmlwjd9405.github.io/2018/05/06/algorithm-insertion-sort.html

2. Python ์ฝ”๋“œ

def insertion_sort(arr):
    for end in range(1, len(arr)):
        for i in range(end, 0, -1):
            if arr[i - 1] > arr[i]:
                arr[i - 1], arr[i] = arr[i], arr[i - 1]

3. Java ์ฝ”๋“œ

public class Insertion {
    public static void sort(int[] arr) {
        for (int end = 1; end < arr.length; end++) {
            for (int i = end; i > 0; i--) {
                if (arr[i - 1] > arr[i])
                    swap(arr, i - 1, i);
            }
        }
    }

    private static void swap(int[] arr, int a, int b) {
        int tmp = arr[a];
        arr[a] = arr[b];
        arr[b] = tmp;
    }
}

4. Java ์ง์ ‘ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ

static void insertionSort(int[] arr) {
        int key = 0;    //โญ ๋งค ํ„ด๋งˆ๋‹ค ๋น„๊ต์˜ ๊ธฐ์ค€์ด ๋  ๊ฐ’์„ key๋กœ
        int j = 0;
        for(int i=1; i<arr.length; i++) {
            key = arr[i];
            j = i-1;    //โญ j=i--๋กœ ๋‘๋ฉด i์˜ ๊ฐ’์ด ๋จผ์ € 1๊ฐ์†Œ๋œ ํ›„ j์— ๋ฐ˜์˜๋˜๊ธฐ ๋•Œ๋ฌธ์— j=i-1๊ณผ ์˜๋ฏธ์ƒ์œผ๋กœ ์ „ํ˜€ ๋‹ค๋ฅด๋‹ค.
            while(j>=0 && arr[j]>key) { //โญ j๊ฐ€ 0์ด์ƒ์ด์–ด์•ผ, ์ธ๋ฑ์Šค ์ฐธ์กฐ ๊ฐ€๋Šฅ. arr[j]๊ฐ€ key๊ฐ’๋ณด๋‹ค ๋†’์„ ๋•Œ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ”์ฃผ๋Š” ์กฐ๊ฑด๋ฌธ
                arr[j+1] = arr[j];      //โญarr[j+1]์„ arr[i]๋กœ ๋†“์„์‹œ i์˜ ์œ„์น˜๋Š” ๊ณ ์ •๋œ ์ƒํƒœ์ด๋ฏ€๋กœ, ๋œฌ๊ธˆ์—†์ด ์ด๋ฏธ ์ˆœ์„œ๋ฅผ ๋ฐ”๊พผ ์ž๋ฆฌ์— arr[j]๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.
                arr[j] = key;
                j--;
            }
        }
    }
  • โญ j=i-1๊ณผ j=i--์€ ์ „ํ˜€ ๋‹ค๋ฅธ ๋‚ด์šฉ์ด๋‹ค. ํ›„์ž๋Š” ์ฆ๊ฐ์—ฐ์‚ฐ์ž๊ฐ€ ๋จผ์ € ์ ์šฉ๋œ ๋‹ค์Œ j์˜ ๊ฐ’์— ์ €์žฅ๋˜๋ฏ€๋กœ, ๊ฒฐ๊ตญ i์˜ ๊ฐ’์ด ๋ณ€ํ•  ๋ฟ๋”๋ผ j์˜ ๊ฐ’๋„ ๋™์ผํ•œ ๊ฐ’์œผ๋กœ ๋ฐ”๋€๋‹ค.
  • ๐Ÿ’ก arr[j+1]=arr[j] ๋น„๊ต์˜ ๊ธฐ์ค€์ž๋ฅผ ๋ฐ˜๋“œ์‹œ ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค. ๋น„๊ต ๊ธฐ์ค€์ž ์ธ๋ฑ์Šค๊ฐ€ ํ•œ ์นธ์”ฉ ์ค„์–ด๋“ ๋‹ค๋ฉด ๋น„๊ต ๋Œ€์ƒ๋„ ํ•œ ์นธ์”ฉ ์ค„์–ด ๋“ค์–ด์•ผ ํ•œ๋‹ค. arr[j+1]=arr[i]๋Š” ์–ผํ• ๋น„์Šทํ•ด๋ณด์ด์ง€๋งŒ, i๊ฐ€ ๋ฃจํ”„๋ฌธ ๋ฐ”๊นฅ์—์„œ ๊ณ ์ •๋œ๋‹ค๋Š” ์ ์—์„œ ์ „ํ˜€ ๋‹ค๋ฅด๋‹ค. (์ฒ˜์Œ ์‹œ์ž‘ํ•  ๋•Œ๋งŒ i๊ฐ€ j๋ณด๋‹ค 1 ํฐ ๊ฐ’์ธ ๊ฒƒ)

5. ์‚ฝ์ž… ์ •๋ ฌ(insertion sort) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํŠน์ง•

1. ์žฅ์ 

  • ์•ˆ์ „ํ•œ ์ •๋ ฌ ๋ฐฉ๋ฒ•
  • ๋ ˆ์ฝ”๋“œ ์ˆ˜๊ฐ€ ๋จน์„ ๊ฒฝ์šฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž์ฒด๊ฐ€ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋ฏ€๋กœ ๋‹ค๋ฅธ ๋ณต์žกํ•œ ์ •๋ ฌ ๋ฐฉ๋ฒ•๋ณด๋‹ค ์œ ๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋Œ€๋ถ€๋ถ„์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ด๋ฏธ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์— ๋งค์šฐ ํšจ์œจ์ 

2. ๋‹จ์ 

  • ๋น„๊ต์  ๋งŽ์€ ๋ ˆ์ฝ”๋“œ๋“ค์˜ ์ด๋™์„ ํฌํ•จํ•œ๋‹ค.
  • ๋ ˆ์ฝ”๋“œ ์ˆ˜๊ฐ€ ๋งŽ๊ณ  ๋ ˆ์ฝ”๋“œ ํฌ๊ธฐ๊ฐ€ ํด ๊ฒฝ์šฐ์— ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.

3. ๊ทธ ์™ธ

  • ๋ฐฐ์—ด ๋‚ด์—์„œ ๊ตํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ด๋ฏ€๋กœ ๊ณต๊ฐ„๋ณต์žก๋„๋Š” O(1)์ด๋‹ค. ๊ธฐ๊ปํ•ด์•ผ ์›์†Œ๋ฅผ ๊ตํ™˜ํ•  ๋•Œ ์“ฐ์ผ ์ž„์‹œ๋ณ€์ˆ˜ ์ •๋„์˜ ์ถ”๊ฐ€๊ณต๊ฐ„๋งŒ ํ•„์š”ํ•˜๋ฏ€๋กœ in-place ์ •๋ ฌ์ด๋‹ค.
  • ํ‰๊ท ๊ณผ ์ตœ์•…์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n^2)์ด๋‹ค.
  • ์‚ฝ์ž… ์ •๋ ฌ์€ ์ค‘๋ณต๋œ ํ‚ค ๊ฐ’์˜ ์ˆœ์„œ๊ฐ€ ์ •๋ ฌ ํ›„์—๋„ ์œ ์ง€๋˜๋ฏ€๋กœ stable ์ •๋ ฌ์ด๋‹ค.
  • ์„ ํƒ ์ •๋ ฌ์ด๋‚˜ ๋ฒ„๋ธ” ์ •๋ ฌ์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ๋น ๋ฅด๋‹ค.

6. ์‚ฝ์ž… ์ •๋ ฌ์˜ ์‹œ๊ฐ„๋ณต์žก๋„

1. ์ตœ์„ ์˜ ๊ฒฝ์šฐ

  • ๋น„๊ต ํšŸ์ˆ˜
    - ์ด๋™ ์—†์ด 1๋ฒˆ์˜ ๋น„๊ต๋งŒ ์ด๋ฃจ์–ด์ง„๋‹ค.
    - ์™ธ๋ถ€ ๋ฃจํ”„: (n-1)๋ฒˆ
  • Best T(n) = O(n)

2. ์ตœ์•…์˜ ๊ฒฝ์šฐ(์ž…๋ ฅ ์ž๋ฃŒ๊ฐ€ ์—ญ์ˆœ์ผ ๊ฒฝ์šฐ)

  • ๋น„๊ต ํšŸ์ˆ˜
    - ์™ธ๋ถ€ ๋ฃจํ”„ ์•ˆ์˜ ๊ฐ ๋ฐ˜๋ณต๋งˆ๋‹ค i๋ฒˆ์˜ ๋น„๊ต ์ˆ˜ํ–‰
    - ์™ธ๋ถ€ ๋ฃจํ”„: (n-1)+(n-2)+...+2+1 = n(n-1)/2 = O(n^2)
  • ๊ตํ™˜ ํšŸ์ˆ˜
    - ์™ธ๋ถ€ ๋ฃจํ”„์˜ ๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค (i+2)๋ฒˆ์˜ ์ด๋™ ๋ฐœ์ƒ
    - n(n-1)/2+2(n-1)=(n^2+3n-4)/2 = O(n^2)
  • WorstT(n) = O(n^2)

7. ์ตœ์ ํ™”

  • โญ๊ธฐ์กด์— ์žˆ๋˜ ๊ฐ’๋“ค์€ ์ด์ „ ํŒจ์Šค์—์„œ ๋ชจ๋‘ ์ •๋ ฌ๋˜์—ˆ๋‹ค๋Š” ์ ์„ ํ™œ์šฉํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ ๋น„๊ต ์ž‘์—…์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด ๊ธฐ์กด ์ •๋ ฌ ๋ฒ”์œ„ [1, 2, 3, 5]์— 4๊ฐ€ ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋œ๋‹ค๋ฉด, 5๋Š” 4๋ณด๋‹ค ํฌ๊ธฐ ๋•Œ๋ฌธ์— swap์ด ํ•„์š”ํ•˜์ง€๋งŒ, 3์€ 4๋ณด๋‹ค ์ž‘๊ธฐ ๋•Œ๋ฌธ์— swap์ด ํ•„์š”์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  3๋ณด๋‹ค ์•ž์— ์žˆ๋Š” ์ˆซ์ž๋“ค์€ ๊ธฐ์กด ํŒจ์Šค์—์„œ ์ด๋ฏธ ์ •๋ ฌ์„ ํ•ด๋†“์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹น์—ฐํžˆ 3๋ณด๋‹ค๋Š” ์ž‘์„ ๊ฒƒ์ด๋ฉฐ, ๋” ์ด์ƒ์˜ 4์™€ ๋Œ€์†Œ ๋น„๊ต๋Š” ๋ฌด์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด ์‚ฌ์‹ค์„ ์ด์šฉํ•˜๋ฉด, ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋œ ๊ฐ’๋ณด๋‹ค ์ž‘์€ ์ˆซ์ž๋ฅผ ๋งŒ๋‚˜๋Š” ์ตœ์ดˆ์˜ ์ˆœ๊ฐ„๊นŒ์ง€๋งŒ ๋‚ด๋ถ€ ๋ฐ˜๋ณต๋ฌธ์„ ์ˆ˜ํ–‰ํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.
[1, 2, 3, 5, 4, ...]: 5 > 4 => swap
 *  *  *  *  ^
[1, 2, 3, 4, 5, ...]: 3 < 4 => OK => all sorted!
 *  *  *  *  *

1. Python ์ฝ”๋“œ

def insertion_sort(arr):
    for end in range(1, len(arr)):
        i = end
        while i > 0 and arr[i - 1] > arr[i]:
            arr[i - 1], arr[i] = arr[i], arr[i - 1]
            i -= 1

2. Java ์ฝ”๋“œ

public class Insertion {
    public static void sort(int[] arr) {
        for (int end = 1; end < arr.length; end++) {
            int i = end;
            while (i > 0 && arr[i - 1] > arr[i]) {
                swap(arr, i - 1, i);
                i--;
            }
        }
    }

    private static void swap(int[] arr, int a, int b) {
        int tmp = arr[a];
        arr[a] = arr[b];
        arr[b] = tmp;
    }
}
  • โญ์ด ์ตœ์ ํ™”๋ฅผ ์ ์šฉํ•˜๋ฉด, ์ •๋ ฌ๋œ ๋ฐฐ์—ด์ด ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ, O(N)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด 5๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ๋œ ๋ฐฐ์—ด์ด ๋“ค์–ด์˜ค๋ฉด ๊ฐ ํŒจ์Šค ๋‹น ๋‹จ ํ•œ ๋ฒˆ ์ด 4๋ฒˆ์˜ ๋น„๊ต๋งŒ์œผ๋กœ ํ•ด๋‹น ๋ฐฐ์—ด์ด ์™„์ „ํžˆ ์ •๋ ฌ๋˜์—ˆ์Œ์„ ์•Œ์•„๋‚ด๊ณ  ์‚ฝ์ž… ์ •๋ ฌ์„ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    [1, 2]: 1 < 2 => all sorted!
    [1, 2, 3]: 2 < 3 => all sorted!
    [1, 2, 3, 4]: 3 < 4 => all sorted!
    [1, 2, 3, 4, 5]: 4 < 5 => all sorted!

8. ์ถ”๊ฐ€ ์ตœ์ ํ™”

  • โญswap ์ž‘์—…์—†์ด ๋‹จ์ˆœํžˆ ๊ฐ’๋“ค์„ shift ์‹œํ‚ค๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์‚ฝ์ž… ์ •๋ ฌ์˜ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์•ž์˜ ๊ฐ’์ด ์ •๋ ฌ ๋ฒ”์œ„์— ์ถ”๊ฐ€์‹œํ‚จ ๊ฐ’๋ณด๋‹ค ํด ๊ฒฝ์šฐ ์•ž์˜ ๊ฐ’์„ ๋’ค๋กœ ๋ฐ€๋‹ค๊ฐ€ ์ตœ์ดˆ๋กœ ์ž‘์€ ๊ฐ’์„ ๋งŒ๋‚˜๋Š” ์ˆœ๊ฐ„ ๊ทธ ๋’ค์— ์ถ”๊ฐ€๋œ ๊ฐ’์„ ๊ผฝ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
def insertion_sort(arr):
    for end in range(1, len(arr)):
        to_insert = arr[end]
        i = end
        while i > 0 and arr[i - 1] > to_insert:
            arr[i] = arr[i - 1]
            i -= 1
        arr[i] = to_insert
public class Insertion {
    public static void sort(int[] arr) {
        for (int end = 1; end < arr.length; end++) {
            int toInsert = arr[end];
            int i = end;
            while (i > 0 && arr[i - 1] > toInsert) {
                arr[i] = arr[i - 1];
                i--;
            }
            arr[i] = toInsert;
        }
    }
}

9. ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹œ๊ฐ„๋ณต์žก๋„ ๋น„๊ต

  • ๋‹จ์ˆœ(๊ตฌํ˜„ ๊ฐ„๋‹จ)ํ•˜์ง€๋งŒ ๋น„ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•
    : ์‚ฝ์ž… ์ •๋ ฌ, ์„ ํƒ ์ •๋ ฌ, ๋ฒ„๋ธ” ์ •๋ ฌ
  • ๋ณต์žกํ•˜์ง€๋งŒ ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•
    : ํ€ต ์ •๋ ฌ, ํž™ ์ •๋ ฌ, ํ•ฉ๋ณ‘ ์ •๋ ฌ, ๊ธฐ์ˆ˜ ์ •๋ ฌ

์ถœ์ฒ˜

  1. [์•Œ๊ณ ๋ฆฌ์ฆ˜] ์‚ฝ์ž… ์ •๋ ฌ(insertion sort)์ด๋ž€
  2. ์‚ฝ์ž… ์ •๋ ฌ(Insertion Sort)
  3. [์•Œ๊ณ ๋ฆฌ์ฆ˜] ์‚ฝ์ž… ์ •๋ ฌ - Insertion Sort (Python, Java)
  4. ์ธ์„ค์…˜์†ŒํŠธ ์‚ฝ์ž…์ •๋ ฌ 5๋ถ„๋งŒ์— ์ดํ•ดํ•˜๊ธฐ - Gunny
profile
9์—์„œ 0์œผ๋กœ, ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ๋ธ”๋กœ๊ทธ

0๊ฐœ์˜ ๋Œ“๊ธ€