-
[Algorithm] ์ ํ์ ๋ ฌ(Selection Sort)๐ปProgramming/Algorithm 2024. 3. 26. 21:39
์ ํ์ ๋ ฌ์ด๋?
์ ๋ ฌ๋์ง ์์ ๋ฐ์ดํฐ๋ค์ ๋ํด ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ์ ๊ตํํจ์ผ๋ก์จ ์ ๋ ฌํ๋ ์ ๋ ฌ ๋ฐฉ๋ฒ์ด๋ค.
์ ํ ์ ๋ ฌ์ ๊ณผ์
์ ๊ฐ์ ์๋ฆฌ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ด ๋๋ค.
1. ํ์ฌ์ ์ธ๋ฑ์ค๋ฅผ minIndex์ ๋ฃ์ด์ค๋ค.
2. ๊ทธ ๋ค์ ์ธ๋ฑ์ค์์ for๋ฌธ์ ๋๋ ค ๋ง์ฝ์ ๋ค๋ฅธ ์ธ๋ฑ์ค์ ๊ฐ์ด ๋ ์๋ค๋ฉด ๋ฐ๊ฟ์ค๋ค. ์ด๋ ๊ฒ ๋ง์ง๋ง๊น์ง ๋๋ฉด minIndex์ ์ธ๋ฑ์ค ๊ฐ์ ๊ฐ์ฅ ์์ ๊ฐ์ ๊ฐ์ง ์ธ๋ฑ์ค์ผ ๊ฒ์ด๋ค.
๋ง์ง๋ง ์ธ๋ฑ์ค๋ ์ด๋ฏธ ๊ทธ ์์ ์ธ๋ฑ์ค๋ฅผ ํตํด ๊ต์ฒด๊ฐ ๋์ด ๊ฐ์ฅ ํฐ ์์ผ ๊ฒ์ด๋ฏ๋ก for๋ฌธ์ n-1๋ฒ๊น์ง๋ง ๋๋ฉด ๋๋ค.
๊ตฌํ ์ฝ๋
import java.util.Scanner; public class Main { private int[] solution(int n, int[] list) { for(int i = 0; i < n-1; i++) { int minIndex = i; for(int j = i+1; j < n; j++) { if(list[j] < list[minIndex]) minIndex = j; } if(minIndex != i) { int tmp = list[i]; list[i] = list[minIndex]; list[minIndex] = tmp; } } return list; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Main T = new Main(); int n = scanner.nextInt(); int[] list = new int[n]; for(int i = 0; i < n; i++) list[i] = scanner.nextInt(); for(int i : T.solution(n, list)) System.out.print(i + " "); } }
์๊ฐ ๋ณต์ก๋
์ฒซ ๋ฒ์งธ ํ์ ์์์ ๋น๊ต ํ์: 1 ~ (n - 1) = n-1
๋ ๋ฒ์งธ ํ์ ์์์ ๋น๊ต ํ์: 1 ~ (n - 2) = n-2
...
(n-1) + (n-2) + ... + 2 + 1 = n(n-1)/2
-> O(n^2)
References
https://ssdragon.tistory.com/110
'๐ปProgramming > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ์ฝ์ ์ ๋ ฌ(Insertion Sort) (0) 2024.03.28 [Algorithm] ๋ฒ๋ธ ์ ๋ ฌ(Bubble Sort) (0) 2024.03.27 [Algorithm] ์ฐ์ ๋ถ๋ถ์์ด (0) 2024.03.05 [Algorithm] Sliding Window ์๊ณ ๋ฆฌ์ฆ (0) 2024.03.03 [Algorithm] Two pointers ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ์ฌ ๊ณตํต์์ ๊ตฌํ๊ธฐ (0) 2024.03.02