Search

ํ€ต ์ •๋ ฌ

ํ€ต ์ •๋ ฌ (Quick Sort)

๋ถ„ํ•  ์ •๋ณต(divide and conquer) ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ํ”ผ๋ฒ—(pivot)์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐฐ์—ด์„ ๋ถ„ํ• ํ•˜๊ณ  ์žฌ๊ท€์ ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์š”์†Œ

ํ•ต์‹ฌ ์š”์†Œ
์„ค๋ช…
ํ”ผ๋ฒ—(Pivot)
๋ฐฐ์—ด์„ ๋ถ„ํ• ํ•˜๋Š” ๊ธฐ์ค€์ด ๋˜๋Š” ์›์†Œ๋กœ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ์„ ํƒ
๋ถ„ํ• (Partition)
ํ”ผ๋ฒ—์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐฐ์—ด์„ ์ž‘์€ ๊ฐ’๊ณผ ํฐ ๊ฐ’์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ณผ์ •
์žฌ๊ท€(Recursion)
๋ถ„ํ• ๋œ ๋ถ€๋ถ„ ๋ฐฐ์—ด์— ๋Œ€ํ•ด ๋™์ผํ•œ ์ •๋ ฌ ๊ณผ์ •์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹

์‹œ๊ฐ„ ๋ณต์žก๋„

์ตœ์„ ์˜ ๊ฒฝ์šฐ
O(n log n)
ํ‰๊ท ์˜ ๊ฒฝ์šฐ
O(n log n)
์ตœ์•…์˜ ๊ฒฝ์šฐ
O(nยฒ)

์ฃผ์š” ํŠน์ง•

โ€ข
๋ถˆ์•ˆ์ • ์ •๋ ฌ: ๋™์ผํ•œ ๊ฐ’์˜ ์›์†Œ๋“ค์˜ ์ƒ๋Œ€์  ์œ„์น˜๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Œ
โ€ข
์ œ์ž๋ฆฌ ์ •๋ ฌ: ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๊ฑฐ์˜ ํ•„์š”ํ•˜์ง€ ์•Š์Œ
โ€ข
๋‹ค๋ฅธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋น„ํ•ด ์ผ๋ฐ˜์ ์œผ๋กœ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๋ณด์ž„

์˜ˆ์‹œ ์ฝ”๋“œ (Java)

/** * ํ€ต ์ •๋ ฌ(Quick Sort)์€ ๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ•˜๋‚˜๋กœ, ํ‰๊ท ์ ์œผ๋กœ O(n log n)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋Š” ํšจ์œจ์ ์ธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. * * ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆœ์„œ๋„: * 1. ํ”ผ๋ฒ—(Pivot)์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. (์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ์„ ํƒ) * 2. ๋ฐฐ์—ด์„ ํ”ผ๋ฒ—์„ ๊ธฐ์ค€์œผ๋กœ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. (ํ”ผ๋ฒ—๋ณด๋‹ค ์ž‘์€ ๊ฐ’๊ณผ ํฐ ๊ฐ’์œผ๋กœ ๋ถ„ํ• ) * 3. ๋ถ„ํ• ๋œ ๋‘ ๋ถ€๋ถ„ ๋ฐฐ์—ด์— ๋Œ€ํ•ด ์žฌ๊ท€์ ์œผ๋กœ ํ€ต ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. * 4. ๋ชจ๋“  ๋ถ€๋ถ„ ๋ฐฐ์—ด์ด ์ •๋ ฌ๋˜๋ฉด ์ „์ฒด ๋ฐฐ์—ด์ด ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค. * * ํŠน์ง•: * - ํ‰๊ท  ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n log n) * - ์ตœ์•… ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n^2) (์ด๋ฏธ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ ํ”ผ๋ฒ— ์„ ํƒ์ด ๋น„ํšจ์œจ์ ์ผ ๊ฒฝ์šฐ) * - ๊ณต๊ฐ„ ๋ณต์žก๋„: O(log n) (์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ ์‚ฌ์šฉ) * - ์ œ์ž๋ฆฌ ์ •๋ ฌ(In-place Sort)๋กœ ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ์ ์Œ */ public class QuickSort { /** * ๋ฐฐ์—ด์„ ํ€ต ์ •๋ ฌํ•˜๋Š” ๋ฉ”์†Œ๋“œ. * * @param arr ์ •๋ ฌํ•  ๋ฐฐ์—ด * @param low ์ •๋ ฌํ•  ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ์‹œ์ž‘ ์ธ๋ฑ์Šค * @param high ์ •๋ ฌํ•  ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ๋ ์ธ๋ฑ์Šค */ public static void quickSort(int[] arr, int low, int high) { if (low < high) { int pivotIndex = partition(arr, low, high); quickSort(arr, low, pivotIndex - 1); // ์™ผ์ชฝ ๋ถ€๋ถ„ ์ •๋ ฌ quickSort(arr, pivotIndex + 1, high); // ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„ ์ •๋ ฌ } } /** * ๋ฐฐ์—ด์„ ๋ถ„ํ• ํ•˜๊ณ  ํ”ผ๋ฒ—์˜ ์ตœ์ข… ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ. * * @param arr ๋ถ„ํ• ํ•  ๋ฐฐ์—ด * @param low ๋ถ„ํ• ํ•  ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ์‹œ์ž‘ ์ธ๋ฑ์Šค * @param high ๋ถ„ํ• ํ•  ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ๋ ์ธ๋ฑ์Šค * @return ํ”ผ๋ฒ—์˜ ์ตœ์ข… ์œ„์น˜ ์ธ๋ฑ์Šค */ private static int partition(int[] arr, int low, int high) { int pivot = arr[high]; // ํ”ผ๋ฒ—์„ ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋กœ ์„ค์ • int i = low - 1; // ์ž‘์€ ์š”์†Œ์˜ ์ธ๋ฑ์Šค for (int j = low; j < high; j++) { if (arr[j] <= pivot) { i++; // ์š”์†Œ ๊ตํ™˜ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } // ํ”ผ๋ฒ—์„ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜๋กœ ์ด๋™ int temp = arr[i + 1]; arr[i + 1] = arr[high]; arr[high] = temp; return i + 1; // ํ”ผ๋ฒ—์˜ ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜ } /** * ๋ฉ”์ธ ๋ฉ”์†Œ๋“œ. ๋ฐฐ์—ด์„ ์ •๋ ฌํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅ. * * @param args ์‹คํ–‰ ์‹œ ์ „๋‹ฌ๋˜๋Š” ๋ช…๋ นํ–‰ ์ธ์ž */ public static void main(String[] args) { int[] data = {10, 7, 8, 9, 1, 5}; System.out.println("Unsorted array:"); for (int num : data) { System.out.print(num + " "); } quickSort(data, 0, data.length - 1); System.out.println("\nSorted array:"); for (int num : data) { System.out.print(num + " "); } } }
Java
๋ณต์‚ฌ

Java Collections๋กœ ๊ตฌํ˜„

import java.util.ArrayList; import java.util.Collections; public class QuickSortCollection { public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<>(); list.add(64); list.add(34); list.add(25); list.add(12); list.add(22); System.out.println("์ •๋ ฌ ์ „: " + list); Collections.sort(list); // ํ€ต ์ •๋ ฌ ๊ธฐ๋ฐ˜์˜ ์ •๋ ฌ ์ˆ˜ํ–‰ System.out.println("์ •๋ ฌ ํ›„: " + list); } }
Java
๋ณต์‚ฌ

ํ€ต ์ •๋ ฌ vs ๋ณ‘ํ•ฉ ์ •๋ ฌ

๋น„๊ต ๊ธฐ์ค€
ํ€ต ์ •๋ ฌ
๋ณ‘ํ•ฉ ์ •๋ ฌ
์‹œ๊ฐ„ ๋ณต์žก๋„ (ํ‰๊ท )
O(n log n)
O(n log n)
์‹œ๊ฐ„ ๋ณต์žก๋„ (์ตœ์•…)
O(nยฒ)
O(n log n)
๊ณต๊ฐ„ ๋ณต์žก๋„
O(log n)
O(n)
์•ˆ์ •์„ฑ
๋ถˆ์•ˆ์ • ์ •๋ ฌ
์•ˆ์ • ์ •๋ ฌ
์ œ์ž๋ฆฌ ์ •๋ ฌ
์˜ˆ
์•„๋‹ˆ์˜ค

ํ€ต ์ •๋ ฌ & ๋ณ‘ํ•ฉ ์ •๋ ฌ ๊ณตํ†ต์ 

โ€ข
๋ถ„ํ•  ์ •๋ณต(Divide and Conquer) ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉ
โ€ข
ํ‰๊ท  ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(n log n)์œผ๋กœ ๋™์ผ
โ€ข
์žฌ๊ท€์  ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅ
โ€ข
๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ํšจ์œจ์ 
โ€ข
๋น„๊ต ๊ธฐ๋ฐ˜ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ฃผ์š” ์ฐจ์ด์  ์„ค๋ช…

๋น„๊ต ํ•ญ๋ชฉ
ํ€ต ์ •๋ ฌ
๋ณ‘ํ•ฉ ์ •๋ ฌ
๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ
์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ฑฐ์˜ ๋ถˆํ•„์š”
๋ฐฐ์—ด ํฌ๊ธฐ๋งŒํผ์˜ ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ํ•„์š”
์•ˆ์ •์„ฑ
๋ถˆ์•ˆ์ • ์ •๋ ฌ (์ˆœ์„œ ์œ ์ง€ ์•ˆ๋จ)
์•ˆ์ • ์ •๋ ฌ (์ˆœ์„œ ์œ ์ง€๋จ)
์‹ค์ œ ์„ฑ๋Šฅ
์ผ๋ฐ˜์ ์œผ๋กœ ๋” ๋น ๋ฆ„
์ผ๊ด€๋œ ์„ฑ๋Šฅ
์ ์šฉ ์ƒํ™ฉ
๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์ ์ด๊ณ  ํ‰๊ท  ์„ฑ๋Šฅ ์ค‘์š”
์•ˆ์ •์  ์ •๋ ฌ๊ณผ ์ผ๊ด€๋œ ์„ฑ๋Šฅ ํ•„์š”
ํ€ต์ •๋ ฌ๊ณผ ๋ณ‘ํ•ฉ์ •๋ ฌ์˜ ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด๋Š”ย ๋ถ„ํ• ๊ณผ ๋ณ‘ํ•ฉ์˜ ๋ฐฉ์‹๊ณผย ๊ณต๊ฐ„ ๋ณต์žก๋„์— ์žˆ์Šต๋‹ˆ๋‹ค.
1.
๋ถ„ํ•  ๋ฐฉ์‹:
โ€ข
ํ€ต ์ •๋ ฌ: ํ”ผ๋ฒ—์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐฐ์—ด์„ย ๋ถ„ํ• ํ•œ ๋’ค, ๊ฐ ๋ถ€๋ถ„ ๋ฐฐ์—ด์„ ์žฌ๊ท€์ ์œผ๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. ๋ณ‘ํ•ฉ ๊ณผ์ •์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
โ€ข
๋ณ‘ํ•ฉ ์ •๋ ฌ: ๋ฐฐ์—ด์„ย ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„ํ• ํ•œ ๋’ค, ๋ณ‘ํ•ฉ ๋‹จ๊ณ„์—์„œ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์„ ํ•ฉ์นฉ๋‹ˆ๋‹ค.
2.
๋ณ‘ํ•ฉ ๊ณผ์ •:
โ€ข
ํ€ต ์ •๋ ฌ: ๋ณ‘ํ•ฉ ๊ณผ์ •์ด ์—†์œผ๋ฉฐ, ๋ถ„ํ•  ๋‹จ๊ณ„์—์„œ ์ •๋ ฌ์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
โ€ข
๋ณ‘ํ•ฉ ์ •๋ ฌ: ๋ณ‘ํ•ฉ ๋‹จ๊ณ„์—์„œ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์„ ํ•ฉ์น˜๋ฉฐ ์ •๋ ฌ์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
3.
๊ณต๊ฐ„ ๋ณต์žก๋„:
โ€ข
ํ€ต ์ •๋ ฌ: ์ œ์ž๋ฆฌ ์ •๋ ฌ(In-place Sort)๋กœ ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ์ ์œผ๋ฉฐ, ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(log n)์ž…๋‹ˆ๋‹ค.
โ€ข
๋ณ‘ํ•ฉ ์ •๋ ฌ: ์ถ”๊ฐ€ ๋ฐฐ์—ด์ด ํ•„์š”ํ•˜๋ฉฐ, ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(n)์ž…๋‹ˆ๋‹ค.
4.
์ตœ์•… ์‹œ๊ฐ„ ๋ณต์žก๋„:
โ€ข
ํ€ต ์ •๋ ฌ: ํ”ผ๋ฒ— ์„ ํƒ์ด ๋น„ํšจ์œจ์ ์ผ ๊ฒฝ์šฐ O(nยฒ)์ž…๋‹ˆ๋‹ค.
โ€ข
๋ณ‘ํ•ฉ ์ •๋ ฌ: ํ•ญ์ƒ O(n log n)์ž…๋‹ˆ๋‹ค.

ํ€ต ์ •๋ ฌ ์ˆœ์„œ๋„

graph TD;
A["๋ฐฐ์—ด์„ ๋ถ„ํ• "] --> B["ํ”ผ๋ฒ— ๊ธฐ์ค€์œผ๋กœ ์ž‘์€ ๊ฐ’
๋ฐฐ์—ด๋กœ ๋‚˜๋ˆˆ๋‹ค"];
A --> C["ํ”ผ๋ฒ— ๊ธฐ์ค€์œผ๋กœ ํฐ ๊ฐ’
๋ฐฐ์—ด๋กœ ๋‚˜๋ˆˆ๋‹ค"];
B --> D["ํฌ๊ธฐ 1์ด ๋  ๋•Œ
๊นŒ์ง€ ์žฌ๊ท€์ ์œผ๋กœ
๋‚˜๋ˆˆ๋‹ค"];
B --> E["ํฌ๊ธฐ 1์ด ๋  ๋•Œ
๊นŒ์ง€ ์žฌ๊ท€์ ์œผ๋กœ
๋‚˜๋ˆˆ๋‹ค"];
C --> F["ํฌ๊ธฐ 1์ด ๋  ๋•Œ
๊นŒ์ง€ ์žฌ๊ท€์ ์œผ๋กœ
๋‚˜๋ˆˆ๋‹ค"];
C --> G["ํฌ๊ธฐ 1์ด ๋  ๋•Œ
๊นŒ์ง€ ์žฌ๊ท€์ ์œผ๋กœ
๋‚˜๋ˆˆ๋‹ค"];
D --> H["์ž‘์€ ๊ฐ’ ๋ฐฐ์—ด์„ ๋ณ‘ํ•ฉ
ํ•˜์—ฌ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์„
๋งŒ๋“ ๋‹ค"];
E --> I["์ž‘์€ ๊ฐ’ ๋ฐฐ์—ด์„ ๋ณ‘ํ•ฉ
ํ•˜์—ฌ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์„
๋งŒ๋“ ๋‹ค"];
F --> J["ํฐ ๊ฐ’ ๋ฐฐ์—ด์„ ๋ณ‘ํ•ฉ
ํ•˜์—ฌ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์„
๋งŒ๋“ ๋‹ค"];
G --> K["์ž‘์€ ๊ฐ’ ๋ฐฐ์—ด์„ ๋ณ‘ํ•ฉ
ํ•˜์—ฌ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์„
๋งŒ๋“ ๋‹ค"];
H --> L["์ •๋ ฌ๋œ ๋ฐฐ์—ด ์™„์„ฑ"];
I --> L;
J --> L;
K --> L;
Mermaid
๋ณต์‚ฌ

์žฌ๊ท€ํ˜ธ์ถœ ์‹คํ–‰ ์ˆœ์„œ

mergeSort(arr, 0, 7) โ”œโ”€ mergeSort(arr, 0, 3) โ”‚ โ”œโ”€ mergeSort(arr, 0, 1) โ”‚ โ”‚ โ”œโ”€ mergeSort(arr, 0, 0) โ†’ (๊ธฐ์ € ์กฐ๊ฑด ์ถฉ์กฑ, ๋ฆฌํ„ด) โ”‚ โ”‚ โ”œโ”€ mergeSort(arr, 1, 1) โ†’ (๊ธฐ์ € ์กฐ๊ฑด ์ถฉ์กฑ, ๋ฆฌํ„ด) โ”‚ โ”‚ โ”œโ”€ merge(arr, 0, 0, 1) โ†’ ๋‘ ๊ฐœ์˜ ์ •๋ ฌ๋œ ๋ฐฐ์—ด ๋ณ‘ํ•ฉ โ”‚ โ”‚ โ”‚ โ”œโ”€ mergeSort(arr, 2, 3) โ”‚ โ”‚ โ”œโ”€ mergeSort(arr, 2, 2) โ†’ (๊ธฐ์ € ์กฐ๊ฑด ์ถฉ์กฑ, ๋ฆฌํ„ด) โ”‚ โ”‚ โ”œโ”€ mergeSort(arr, 3, 3) โ†’ (๊ธฐ์ € ์กฐ๊ฑด ์ถฉ์กฑ, ๋ฆฌํ„ด) โ”‚ โ”‚ โ”œโ”€ merge(arr, 2, 2, 3) โ†’ ๋‘ ๊ฐœ์˜ ์ •๋ ฌ๋œ ๋ฐฐ์—ด ๋ณ‘ํ•ฉ โ”‚ โ”‚ โ”‚ โ”œโ”€ merge(arr, 0, 1, 3) โ†’ ๋‘ ๊ฐœ์˜ ์ •๋ ฌ๋œ ๋ฐฐ์—ด ๋ณ‘ํ•ฉ โ”‚ โ”œโ”€ mergeSort(arr, 4, 7) โ”‚ โ”œโ”€ mergeSort(arr, 4, 5) โ”‚ โ”‚ โ”œโ”€ mergeSort(arr, 4, 4) โ†’ (๊ธฐ์ € ์กฐ๊ฑด ์ถฉ์กฑ, ๋ฆฌํ„ด) โ”‚ โ”‚ โ”œโ”€ mergeSort(arr, 5, 5) โ†’ (๊ธฐ์ € ์กฐ๊ฑด ์ถฉ์กฑ, ๋ฆฌํ„ด) โ”‚ โ”‚ โ”œโ”€ merge(arr, 4, 4, 5) โ†’ ๋‘ ๊ฐœ์˜ ์ •๋ ฌ๋œ ๋ฐฐ์—ด ๋ณ‘ํ•ฉ โ”‚ โ”‚ โ”‚ โ”œโ”€ mergeSort(arr, 6, 7) โ”‚ โ”‚ โ”œโ”€ mergeSort(arr, 6, 6) โ†’ (๊ธฐ์ € ์กฐ๊ฑด ์ถฉ์กฑ, ๋ฆฌํ„ด) โ”‚ โ”‚ โ”œโ”€ mergeSort(arr, 7, 7) โ†’ (๊ธฐ์ € ์กฐ๊ฑด ์ถฉ์กฑ, ๋ฆฌํ„ด) โ”‚ โ”‚ โ”œโ”€ merge(arr, 6, 6, 7) โ†’ ๋‘ ๊ฐœ์˜ ์ •๋ ฌ๋œ ๋ฐฐ์—ด ๋ณ‘ํ•ฉ โ”‚ โ”‚ โ”‚ โ”œโ”€ merge(arr, 4, 5, 7) โ†’ ๋‘ ๊ฐœ์˜ ์ •๋ ฌ๋œ ๋ฐฐ์—ด ๋ณ‘ํ•ฉ โ”‚ โ”œโ”€ merge(arr, 0, 3, 7) โ†’ ์ตœ์ข…์ ์œผ๋กœ ๋ชจ๋“  ๋ถ€๋ถ„์„ ๋ณ‘ํ•ฉ
Java
๋ณต์‚ฌ

์‹คํ–‰ ์ˆœ์„œ๋Œ€๋กœ ๋ถ„ํ•  ๋ฐ ๋ณ‘ํ•ฉ ๊ณผ์ • (Merge Sort ๊ณผ์ • ์‹œ๋ฎฌ๋ ˆ์ด์…˜)

๋ณ‘ํ•ฉ ์ •๋ ฌ์€ "๋ถ„ํ•  (Divide)" ํ›„ "๋ณ‘ํ•ฉ (Merge)" ๊ณผ์ •์ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.
์•„๋ž˜ ํ‘œ์—์„œ๋Š” ๋ถ„ํ• ๊ณผ ๋ณ‘ํ•ฉ์„ ๋™์‹œ์— ์‹คํ–‰ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

1. ์ดˆ๊ธฐ ๋ฐฐ์—ด

{45, 12, 89, 33, 76, 27, 8, 19}
Plain Text
๋ณต์‚ฌ

2. ๋ถ„ํ•  & ๋ณ‘ํ•ฉ ๊ณผ์ •

๋‹จ๊ณ„
๋ถ„ํ•  (Divide)
๋ณ‘ํ•ฉ (Merge)
โ‘ 
{45, 12, 89, 33} {76, 27, 8, 19}
โ‘ก
{45, 12} {89, 33} {76, 27} {8, 19}
โ‘ข
{45} {12} {89} {33} {76} {27} {8} {19}
โ‘ฃ
{12, 45} {33, 89} {27, 76} {8, 19}
โ‘ค
{12, 33, 45, 89} {8, 19, 27, 76}
โ‘ฅ
{8, 12, 19, 27, 33, 45, 76, 89}
(์ตœ์ข… ์ •๋ ฌ ์™„๋ฃŒ)

3. ๊ณผ์ • ์ƒ์„ธ ์‹œ๊ฐํ™”

์ดˆ๊ธฐ ์ƒํƒœ: {45, 12, 89, 33, 76, 27, 8, 19} 1. ๋ถ„ํ• : {45, 12, 89, 33} | {76, 27, 8, 19} 2. ๋ถ„ํ• : {45, 12} | {89, 33} | {76, 27} | {8, 19} 3. ๋ถ„ํ• : {45} {12} | {89} {33} | {76} {27} | {8} {19} ---------------------------------------------------- 4. ๋ณ‘ํ•ฉ: {12, 45} | {33, 89} | {27, 76} | {8, 19} 5. ๋ณ‘ํ•ฉ: {12, 33, 45, 89} | {8, 19, 27, 76} 6. ๋ณ‘ํ•ฉ: {8, 12, 19, 27, 33, 45, 76, 89} (์ตœ์ข… ์ •๋ ฌ ์™„๋ฃŒ)
Plain Text
๋ณต์‚ฌ

4. ์ตœ์ข… ๊ฒฐ๊ณผ

{8, 12, 19, 27, 33, 45, 76, 89}
Plain Text
๋ณต์‚ฌ
์ด์ฒ˜๋Ÿผ ๋ณ‘ํ•ฉ ์ •๋ ฌ์€ ๋ถ„ํ• (Divide) โ†’ ์ •๋ ฌ ๋ฐ ๋ณ‘ํ•ฉ(Merge) ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉฐ ์ •๋ ฌ์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.