์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ดํดํ๊ธฐ
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
๋ณต์ฌ



