Amenable
Amenable's Blog
Amenable
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (189)
    • ๐Ÿ“‚ JAVA (87)
      • ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” (65)
      • ์ฃผ์š” ๊ฐœ๋… (22)
    • ๐Ÿ“‚ ๊ฐœ๋ฐœ ์„œ์  (22)
      • ์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ (1)
      • ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด (2)
      • ํด๋ฆฐ ์ฝ”๋“œ (8)
      • ํ•จ๊ป˜ ์ž๋ผ๊ธฐ (1)
      • ๊ทธ๋ฆผ์œผ๋กœ ๋ฐฐ์šฐ๋Š” HTTP&Network Basic (10)
    • ๐Ÿ“‚ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (8)
      • ๊ฐœ๋… (8)
      • ๋ฌธ์ œํ’€์ด (0)
    • ๐Ÿ“‚ ๋„คํŠธ์›Œํฌ (14)
      • ๊ฐœ๋… (6)
      • ์„ฑ๊ณต๊ณผ ์‹คํŒจ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” 1%์˜ ๋„คํŠธ์›Œํฌ ์›๋ฆฌ (8)
    • ๐Ÿ“‚ ์Šคํ”„๋ง (13)
      • ๊ธฐ๋ณธ ๊ฐœ๋… (13)
    • ๐Ÿ“‚ WEB (5)
    • ๐Ÿ“‚ ์ž๋ฃŒ๊ตฌ์กฐ (12)
      • ๊ฐœ๋… (2)
      • ์ •๋ ฌ (8)
      • ํŠธ๋ฆฌ (2)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (10)
      • ์ตœ์†Œ์‹ ์žฅํŠธ๋ฆฌ (2)
      • ์ตœ๋‹จ ๊ฒฝ๋กœ (2)
      • ๋ฌธ์ž์—ด (2)
      • ETC (4)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜_๋ฌธ์ œํ’€์ด (4)
      • BOJ_๋ฐฑ์ค€ (4)
    • ๐Ÿ“‚ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (3)
    • ๐Ÿ“‚ DevOps (2)
      • ๋ฐฐํฌ (2)
    • ๐Ÿ“‚ ํ›„๊ธฐ (8)
      • ์šฐ์•„ํ•œ ํ…Œํฌ์ฝ”์Šค(ํ”„๋ฆฌ์ฝ”์Šค) (4)
      • 2023๋…„ (3)
      • 2024๋…„ (1)
    • ๐Ÿ“‚ ํšŒ๊ณ  (1)
      • 2023๋…„ (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿš€ GitHub

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Amenable

Amenable's Blog

ํž™ ์ •๋ ฌ (Heap Sort)
๐Ÿ“‚ ์ž๋ฃŒ๊ตฌ์กฐ/์ •๋ ฌ

ํž™ ์ •๋ ฌ (Heap Sort)

2023. 3. 12. 14:57

1. ์ •์˜ ๐Ÿ„‍โ™‚๏ธ

 

ํž™ ์ •๋ ฌ

  ํž™์ •๋ ฌ์ด๋ž€ ์ž๋ฃŒ๊ตฌ์กฐ ํž™(Heap)์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์ •๋ ฌ ๋ฐฉ์‹์ด๋‹ค. ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์ผ ๊ฒฝ์šฐ ์ตœ๋Œ€ํž™์„ ์ด์šฉํ•˜๊ณ  ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ์ผ ๊ฒฝ์šฐ ์ตœ์†Œํž™์„ ์ด์šฉํ•œ๋‹ค.

  ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด ํž™ ์ •๋ ฌ์€ ๋ฃจํŠธ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ œ๊ฑฐ๋œ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ๋ฐฐ์—ด์˜ ๋’ท๋ถ€๋ถ„๋ถ€ํ„ฐ ์ฑ„์›Œ ๋„ฃ์œผ๋ฉด์„œ ์ •๋ ฌ์ด ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒƒ์ด๋‹ค.

 

2. ๋™์ž‘ ๋ฐฉ์‹ ๐Ÿšฃ‍โ™‚๏ธ

  ์ตœ๋Œ€ํž™์„ ์ด์šฉํ•˜์—ฌ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด ๋ณด์ž. ๊ฐ€์žฅ ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๋™์ž‘๋ฐฉ์‹์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  1. ์ •๋ ฌํ•ด์•ผ ํ•˜๋Š” ์›์†Œ๋“ค์„ ํ•˜๋‚˜์”ฉ ํž™์— ๋„ฃ์–ด์ค€๋‹ค.
  2. ์‚ญ์ œ๋ฅผ ํ•˜๋ฉด์„œ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ๊ทธ๊ฒƒ์„ ๋ฐฐ์—ด์˜ ๋’ท๋ถ€๋ถ„๋ถ€ํ„ฐ ์ฑ„์šด๋‹ค.

  ์ด๋ ‡๊ฒŒ ํ•œ๋‹ค๋ฉด ๊ธฐ์กด ๋ฐฐ์—ด๋กœ๋ถ€ํ„ฐ ํž™์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฐ์—ด ํ•˜๋‚˜๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ๋งŒ๋“ค๊ณ (1๋ฒˆ ๊ณผ์ •), ๋’ท๋ถ€๋ถ„๋ถ€ํ„ฐ ์ •๋ ฌ๋œ ์›์†Œ๋“ค์„ ๋„ฃ์„ ๋ฐฐ์—ด์„ ํ•˜๋‚˜ ๋” ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.(2๋ฒˆ ๊ณผ์ •) ๊ทธ๋Ÿฌ๋ฉด ์ด 2๊ฐœ์˜ ๋ฐฐ์—ด์„ ๋” ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

  ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ธฐ์กด์˜ ๋ฐฐ์—ด์—์„œ ๋ฐ”๋กœ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์„ ์•Œ์•„๋ณด์ž. ์ด ๋ฐฉ์‹์€ Heapify ์—ฐ์‚ฐ์„ ์ด์šฉํ•˜์—ฌ ์ถ”๊ฐ€ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์ •๋ ฌํ•œ๋‹ค. Heapify๋ž€ ํž™ ์ƒ์„ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ๋‘ ์ž์‹ ๋…ธ๋“œ ์ค‘ ํฌ๊ธฐ๊ฐ€ ๋” ํฐ ์ž์‹์„ ๋ถ€๋ชจ์™€ ๋ฐ”๊พธ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๋™์ž‘ ๋ฐฉ์‹์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  1. ์ตœ๋Œ€ ํž™์„ ๊ตฌ์„ฑํ•œ๋‹ค.
  2. ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ๋งˆ์ง€๋ง‰ ์š”์†Œ์™€ ๋ฐ”๊พผ๋‹ค.
  3. ํž™์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ํ•˜๋‚˜ ์ค„์ด๊ณ  ํž™์„ ๋‹ค์‹œ ๊ตฌ์„ฑํ•œ๋‹ค.
  4. 2~3 ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

  ์ผ๋ฐ˜์ ์ธ ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ 0๋ฒˆ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ ๋ถ€๋ชจ ์ธ๋ฑ์Šค์™€ ์ž์‹ ์ธ๋ฑ์Šค์˜ ๊ด€๊ณ„๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ์ƒ๊ฐํ•œ๋‹ค๋Š” ์ ์„ ์œ ์˜ํ•˜์ž.

๋ถ€๋ชจ Index = (์ž์‹ Index) / 2 - 1
์™ผ์ชฝ ์ž์‹ Index = (๋ถ€๋ชจ Index) * 2 + 1
์˜ค๋ฅธ์ชฝ ์ž์‹ Index = (๋ถ€๋ชจ Index) * 2 + 2

  '2, 1, 3, 4, 5'๋ฅผ ํž™์ •๋ ฌ์„ ์ด์šฉํ•ด์„œ ์ •๋ ฌํ•ด ๋ณด์ž. size๋Š” 5์ด๋ฏ€๋กœ 1๋ถ€ํ„ฐ ๋ถ€๋ชจ์ธ๋ฑ์Šค๋กœ ํ•˜์—ฌ ์ตœ๋Œ€ํž™์„ ๊ตฌ์„ฑํ•œ๋‹ค. ( 5 / 2 - 1 = 5)(์ฝ”๋“œ์—์„œ ๊ตฌํ˜„๋œ Heapify๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ๋™์ž‘ ๋ฐฉ์‹ ์ถฉ๋ถ„ํžˆ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์šฐ์„  ๊ทธ๋ฆผ์„ ํ†ตํ•ด ๋™์ž‘ ๋ฐฉ์‹์„ ํฌ๊ฒŒ ์ดํ•ดํ•ด ๋ณด๋„๋ก ํ•˜์ž.)

  ์™„์„ฑ๋œ ๋ชจ์Šต์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  ๊ทธ๋ฆฌ๊ณ  ๋ฃจํŠธ ๋…ธ๋“œ์™€ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ๋ฐ”๊ฟ”์ฃผ๊ณ  ํž™์„ ์žฌ๊ตฌ์„ฑํ•˜๋Š” ๋™์ž‘์„ ๋ฐ˜๋ณตํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ถ€ํ„ฐ ํ•ด์„œ ์š”์†Œ๋“ค์ด ์ •๋ ฌ๋œ๋‹ค. ์ •๋ ฌ๋œ ์š”์†Œ๋Š” ํŒŒ๋ž€์ƒ‰์œผ๋กœ ํ‘œ์‹œํ•˜์˜€๋‹ค.

  ์ตœ์ข…์ ์œผ๋กœ ์ •๋ ฌ๋œ ๋ชจ์Šต์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

3. ๊ตฌํ˜„(JAVA) ๐ŸŠ‍โ™‚๏ธ

  ๋‹ค์Œ์€ ๊ตฌํ˜„์ฝ”๋“œ์ด๋‹ค. Heapify๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์‚ฌ์ด์ฆˆ๋ฅผ ์ค„์—ฌ๊ฐ€๋ฉด์„œ Heapify๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์„ ์œ ์˜ํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•ด ๋ณด์ž.

public static void main(String[] args) {
    int[] array = { 2,1,3,4,5 };

    heapSort(array);
}

public static void heapSort(int[] array) {
    int size = array.length;

    // ํž™์„ ๊ตฌ์„ฑํ•œ๋‹ค. - ๋™์ž‘๋ฐฉ์‹(1)
    int parent = size / 2 - 1;
    for(int i = parent; i >= 0; i--) {
        heapify(array, size, i);
    }

    for(int i = size - 1; i > 0; i--) {
        // ๋ฃจํŠธ๋…ธ๋“œ์™€ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ๋ฐ”๊พผ๋‹ค. - ๋™์ž‘๋ฐฉ์‹(2)
        swap(array, 0, i);
        // ํž™์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ํ•˜๋‚˜ ์ค„์ด๊ณ  ํž™์„ ๋‹ค์‹œ ๊ตฌ์„ฑํ•œ๋‹ค. - ๋™์ž‘๋ฐฉ์‹(3)
        heapify(array, i, 0);
    }
}

public static void heapify(int array[], int size, int current) {
    int parent = current;
    int leftChild = current * 2 + 1;
    int rightChild = current * 2 + 2;

    if(leftChild < size 
            && array[parent] < array[leftChild]) {
        parent = leftChild;
    }

    if(rightChild < size 
            && array[parent] < array[rightChild]) {
        parent = rightChild;
    }

    if(current != parent) {
        swap(array, parent, current);
        heapify(array, size, parent);
    }
}

public static void swap(int[] array, int a, int b) {
    int temp = array[a];
    array[a] = array[b];
    array[b] = temp;
}

 

4. ์‹œ๊ฐ„๋ณต์žก๋„ ๐Ÿคฝ‍โ™‚๏ธ

  Heapify๋ฅผ ํ•˜๋Š”๋ฐ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(log N)์ด๋‹ค. ํž™ ์ •๋ ฌ์„ ํ•˜๋Š”๋ฐ Heapify๋ฅผ N๋ฒˆ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ด ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(N logN)์ด ๋˜๊ฒŒ ๋œ๋‹ค.

  ์ตœ์„ (BEST) ํ‰๊ท (AVERAGE) ์ตœ์•…(WORST)
์‹œ๊ฐ„๋ณต์žก๋„ O(N logN) O(N logN) O(N logN)

 

ํ•ด๋‹น ๊ธ€์€
Gyoogle๋‹˜์˜ ํž™ ์ •๋ ฌ(Heap Sort),
๋‚˜๋™๋นˆ๋‹˜์˜ ํž™ ์ •๋ ฌ(Heap Sort)
์„ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

'๐Ÿ“‚ ์ž๋ฃŒ๊ตฌ์กฐ > ์ •๋ ฌ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์นด์šดํŒ… ์ •๋ ฌ (Counting Sort)  (0) 2023.04.12
ํ€ต ์ •๋ ฌ (Quick Sort)  (0) 2023.03.20
์œ„์ƒ ์ •๋ ฌ(Topology Sort)  (2) 2023.03.07
๋ณ‘ํ•ฉ ์ •๋ ฌ(Merge Sort)  (0) 2023.03.07
์‚ฝ์ž… ์ •๋ ฌ(Insertion Sort)  (0) 2023.03.06
    '๐Ÿ“‚ ์ž๋ฃŒ๊ตฌ์กฐ/์ •๋ ฌ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • ์นด์šดํŒ… ์ •๋ ฌ (Counting Sort)
    • ํ€ต ์ •๋ ฌ (Quick Sort)
    • ์œ„์ƒ ์ •๋ ฌ(Topology Sort)
    • ๋ณ‘ํ•ฉ ์ •๋ ฌ(Merge Sort)
    Amenable
    Amenable
    CS, ์ž๋ฐ”, ์ž๋ฃŒ๊ตฌ์กฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์Šคํ”„๋ง, ์Šคํ”„๋ง ๋ถ€ํŠธ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐœ๋ฐœ์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”