Search

์ •๋ ฌ ์ดํ•ดํ•˜๊ธฐ

์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ดํ•ดํ•˜๊ธฐ

1. ์„ ํƒ ์ •๋ ฌ (Selection Sort)

๊ฐœ๋… ์„ค๋ช…

์„ ํƒ ์ •๋ ฌ์€ ๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ฐพ์•„ ๋งจ ์•ž์˜ ๊ฐ’๊ณผ ๊ตํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.
๋™์ž‘ ์›๋ฆฌ:
1.
๋ฐฐ์—ด์—์„œ ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ์Šต๋‹ˆ๋‹ค.
2.
์ตœ์†Ÿ๊ฐ’์„ ๋งจ ์•ž์˜ ๊ฐ’๊ณผ ๊ตํ™˜ํ•ฉ๋‹ˆ๋‹ค.
3.
๋งจ ์•ž์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋ฐฐ์—ด์—์„œ ์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
์‹œ๊ฐ„ ๋ณต์žก๋„: O(nยฒ)
๊ณต๊ฐ„ ๋ณต์žก๋„: O(1)

๋™์ž‘ ํ๋ฆ„๋„

graph TD
    A["์‹œ์ž‘: [5, 3, 8, 4, 2]"] --> B["1ํšŒ์ „: ์ตœ์†Ÿ๊ฐ’ 2 ์ฐพ๊ธฐ"]
    B --> C["[2, 3, 8, 4, 5]"]
    C --> D["2ํšŒ์ „: ์ตœ์†Ÿ๊ฐ’ 3 ์ฐพ๊ธฐ"]
    D --> E["[2, 3, 8, 4, 5]"]
    E --> F["3ํšŒ์ „: ์ตœ์†Ÿ๊ฐ’ 4 ์ฐพ๊ธฐ"]
    F --> G["[2, 3, 4, 8, 5]"]
    G --> H["4ํšŒ์ „: ์ตœ์†Ÿ๊ฐ’ 5 ์ฐพ๊ธฐ"]
    H --> I["[2, 3, 4, 5, 8]"]
    I --> J["์ •๋ ฌ ์™„๋ฃŒ"]
Mermaid
๋ณต์‚ฌ

์˜ˆ์‹œ ์ฝ”๋“œ

import java.util.Scanner; // ์„ ํƒ์ •๋ ฌ public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] arr = new int[n]; for (int i = 0; i < n; i++) { arr[i] = sc.nextInt(); } // [1][3][2][5][4] for (int i = 0; i < n; i++) { for (int j = i+1; j < n ; j++) { if( arr[i] > arr[j] ) { // ๊ตํ™˜ํŒจํ„ด (swap) int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } for (int i = 0; i < n ; i++) { System.out.println(arr[i]); } } }
Java
๋ณต์‚ฌ

2. ๋ฒ„๋ธ” ์ •๋ ฌ (Bubble Sort)

๊ฐœ๋… ์„ค๋ช…

๋ฒ„๋ธ” ์ •๋ ฌ์€ ์ธ์ ‘ํ•œ ๋‘ ์›์†Œ๋ฅผ ๋น„๊ตํ•˜์—ฌ ํฐ ๊ฐ’์„ ๋’ค๋กœ ๋ณด๋‚ด๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ๋งˆ์น˜ ๊ฑฐํ’ˆ์ด ์ˆ˜๋ฉด์œผ๋กœ ์˜ฌ๋ผ์˜ค๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํฐ ๊ฐ’์ด ๋ฐฐ์—ด์˜ ๋์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
๋™์ž‘ ์›๋ฆฌ:
1.
์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ถ€ํ„ฐ ์ธ์ ‘ํ•œ ์›์†Œ๋ผ๋ฆฌ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.
2.
์•ž์˜ ์›์†Œ๊ฐ€ ๋” ํฌ๋ฉด ๋‘ ์›์†Œ๋ฅผ ๊ตํ™˜ํ•ฉ๋‹ˆ๋‹ค.
3.
๋ฐฐ์—ด์˜ ๋๊นŒ์ง€ ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉด ๊ฐ€์žฅ ํฐ ๊ฐ’์ด ๋งจ ๋’ค๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
4.
์ •๋ ฌ๋œ ๋ถ€๋ถ„์„ ์ œ์™ธํ•˜๊ณ  ์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
์‹œ๊ฐ„ ๋ณต์žก๋„: O(nยฒ)
๊ณต๊ฐ„ ๋ณต์žก๋„: O(1)

๋™์ž‘ ํ๋ฆ„๋„

graph TD
    A["์‹œ์ž‘: [5, 3, 8, 4, 2]"] --> B["1ํšŒ์ „: ์ธ์ ‘ ์›์†Œ ๋น„๊ต"]
    B --> C["[3, 5, 4, 2, 8]"]
    C --> D["2ํšŒ์ „: ์ธ์ ‘ ์›์†Œ ๋น„๊ต"]
    D --> E["[3, 4, 2, 5, 8]"]
    E --> F["3ํšŒ์ „: ์ธ์ ‘ ์›์†Œ ๋น„๊ต"]
    F --> G["[3, 2, 4, 5, 8]"]
    G --> H["4ํšŒ์ „: ์ธ์ ‘ ์›์†Œ ๋น„๊ต"]
    H --> I["[2, 3, 4, 5, 8]"]
    I --> J["์ •๋ ฌ ์™„๋ฃŒ"]
Mermaid
๋ณต์‚ฌ

์˜ˆ์‹œ ์ฝ”๋“œ

import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[] arr = new int[10001]; int n = sc.nextInt(); for (int i = 0; i < n; i++) { arr[i] = sc.nextInt(); } for (int i = 0; i < n; i++) { for (int j = 0; j < n-(i+1); j++) { if( arr[j] > arr[j+1] ) { int temp = arr[j+1]; arr[j+1] = arr[j]; arr[j] = temp; } } } for (int i = 0; i < n; i++) { System.out.println(arr[i]); } } }
Java
๋ณต์‚ฌ

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

๊ฐœ๋… ์„ค๋ช…

์‚ฝ์ž… ์ •๋ ฌ์€ ๋ฐฐ์—ด์„ ์ •๋ ฌ๋œ ๋ถ€๋ถ„๊ณผ ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„๊ณ , ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„์˜ ์›์†Œ๋ฅผ ์ •๋ ฌ๋œ ๋ถ€๋ถ„์˜ ์ ์ ˆํ•œ ์œ„์น˜์— ์‚ฝ์ž…ํ•˜๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.
๋™์ž‘ ์›๋ฆฌ:
1.
๋‘ ๋ฒˆ์งธ ์›์†Œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๊ทธ ์•ž์˜ ์›์†Œ๋“ค๊ณผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.
2.
ํ˜„์žฌ ์›์†Œ(key)๋ณด๋‹ค ํฐ ์›์†Œ๋“ค์„ ํ•œ ์นธ์”ฉ ๋’ค๋กœ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค.
3.
์ ์ ˆํ•œ ์œ„์น˜๋ฅผ ์ฐพ์œผ๋ฉด key๋ฅผ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.
4.
๋ฐฐ์—ด์˜ ๋๊นŒ์ง€ ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
์‹œ๊ฐ„ ๋ณต์žก๋„: O(nยฒ) - ์ตœ์„ ์˜ ๊ฒฝ์šฐ O(n)
๊ณต๊ฐ„ ๋ณต์žก๋„: O(1)

๋™์ž‘ ํ๋ฆ„๋„

graph TD
    A["์‹œ์ž‘: [5, 3, 8, 4, 2]"] --> B["key=3, ์ •๋ ฌ๋œ ๋ถ€๋ถ„: [5]"]
    B --> C["[3, 5, 8, 4, 2]"]
    C --> D["key=8, ์ •๋ ฌ๋œ ๋ถ€๋ถ„: [3, 5]"]
    D --> E["[3, 5, 8, 4, 2]"]
    E --> F["key=4, ์ •๋ ฌ๋œ ๋ถ€๋ถ„: [3, 5, 8]"]
    F --> G["[3, 4, 5, 8, 2]"]
    G --> H["key=2, ์ •๋ ฌ๋œ ๋ถ€๋ถ„: [3, 4, 5, 8]"]
    H --> I["[2, 3, 4, 5, 8]"]
    I --> J["์ •๋ ฌ ์™„๋ฃŒ"]
Mermaid
๋ณต์‚ฌ

์˜ˆ์‹œ ์ฝ”๋“œ

import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] arr = new int[n]; for (int i = 0; i < n; i++) { arr[i] = sc.nextInt(); } int i, j, key; for (i = 1; i < n; i++) { key = arr[i]; for (j = i-1; j >= 0 && arr[j]>key ; j--) { arr[j+1] = arr[j]; } arr[j+1] = key; } for (int k = 0; k < n; k++) { System.out.println(arr[k]); } } }
Java
๋ณต์‚ฌ

์‘์šฉ ๋ฌธ์ œ