public class SelectionSort {
public static void selectionSort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
int minIdx = i;
// ํ์ฌ ์์น ์ดํ์ ๋ชจ๋ ์์๋ค๊ณผ ๋น๊ตํ์ฌ ์ต์๊ฐ ์ฐพ๊ธฐ
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIdx]) {
minIdx = j;
}
}
// ํ์ฌ ์์น์ ์ฐพ์ ์ต์๊ฐ์ ์์น๋ฅผ ๊ตํ
int temp = arr[i];
arr[i] = arr[minIdx];
arr[minIdx] = temp;
}
}
// ๋ฐฐ์ด ์ถ๋ ฅ์ ์ํ ๋ฉ์๋
public static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
// ํ
์คํธ๋ฅผ ์ํ ๋ฉ์ธ ๋ฉ์๋
public static void main(String[] args) {
int[] arr = {64, 34, 25, 12, 22, 11, 90};
System.out.println("์ ๋ ฌ ์ ๋ฐฐ์ด:");
printArray(arr);
selectionSort(arr);
System.out.println("์ ๋ ฌ ํ ๋ฐฐ์ด:");
printArray(arr);
}
}
Java
๋ณต์ฌ
์๊ฐ๋ณต์ก๋ ๋ถ์
์ ํ ์ ๋ ฌ์ ์๊ฐ๋ณต์ก๋๋ O(nยฒ)์
๋๋ค. ์ด๋ ๋ค์๊ณผ ๊ฐ์ ๋ถ์์ ํตํด ๋์ถ๋ฉ๋๋ค:
โข
์ธ๋ถ ๋ฃจํ (i): n๋ฒ ๋ฐ๋ณต
โฆ
๋ฐฐ์ด์ ์ฒ์๋ถํฐ ๋๊น์ง ์ํ (0 ~ n-1)
โข
๋ด๋ถ ๋ฃจํ (j): (n-i)๋ฒ ๋ฐ๋ณต
โฆ
์ฒซ ๋ฒ์งธ ๋ฐ๋ณต: n-1๋ฒ ๋น๊ต
โฆ
๋ ๋ฒ์งธ ๋ฐ๋ณต: n-2๋ฒ ๋น๊ต
โฆ
๋ง์ง๋ง ๋ฐ๋ณต: 1๋ฒ ๋น๊ต
๋ฐ๋ผ์ ์ ์ฒด ์ฐ์ฐ ํ์๋:
(n-1) + (n-2) + ... + 2 + 1 = n(n-1)/2
์ด ์์์ด ๋์ค๋ ๊ณผ์ ์ ์ดํด๋ณด๋ฉด:
โข
์ฒซ ๋ฒ์งธ ๋ฐ๋ณต์์๋ (n-1)๋ฒ ๋น๊ต
โข
๋ ๋ฒ์งธ ๋ฐ๋ณต์์๋ (n-2)๋ฒ ๋น๊ต
โข
์ธ ๋ฒ์งธ ๋ฐ๋ณต์์๋ (n-3)๋ฒ ๋น๊ต
์ด๋ฐ ์์ผ๋ก ๊ณ์๋์ด ๋ง์ง๋ง์๋ 1๋ฒ ๋น๊ตํ๊ฒ ๋ฉ๋๋ค.
์ด๋ ๋ฑ์ฐจ์์ด์ ํฉ ๊ณต์์ผ๋ก ๊ณ์ฐํ ์ ์์ต๋๋ค:
โข
์ฒซ์งธํญ a = (n-1)
โข
๋ง์ง๋งํญ l = 1
โข
ํญ์ ๊ฐ์ = (n-1)
๋ฑ์ฐจ์์ด์ ํฉ ๊ณต์: (์ฒซ์งธํญ + ๋ง์ง๋งํญ) ร ํญ์ ๊ฐ์ รท 2
๋ฐ๋ผ์ ((n-1) + 1) ร (n-1) รท 2 = n(n-1)/2๊ฐ ๋ฉ๋๋ค.
๋ค, ๋น
์ค ํ๊ธฐ๋ฒ์์๋ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ์ฆ๊ฐํ๋ ์ต๊ณ ์ฐจํญ๋ง ๋จ๊ธฐ๊ณ ๋๋จธ์ง ํญ๊ณผ ์์๋ ์ ๊ฑฐํฉ๋๋ค. ์ ์์์:
โข
nยฒ/2 - n/2 ์์ nยฒ์ด ์ต๊ณ ์ฐจํญ
โข
์์ 1/2๋ ์ ๊ฑฐ
โข
์ ์ฐจํญ -n/2๋ ์ ๊ฑฐ
๋ฐ๋ผ์ ์ต์ข
์ ์ผ๋ก O(nยฒ)๋ก ํํ๋ฉ๋๋ค. ์ด๋ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋๊ฐ ์
๋ ฅ ํฌ๊ธฐ์ ์ ๊ณฑ์ ๋น๋กํ์ฌ ์ฆ๊ฐํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๋ฐ๋ผ์, O(nยฒ)๊ฐ ๋ฉ๋๋ค.
๊ณต๊ฐ๋ณต์ก๋
์ ํ ์ ๋ ฌ์ ๊ณต๊ฐ๋ณต์ก๋๋ O(1)์
๋๋ค. ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฑฐ์ ์ฌ์ฉํ์ง ์๊ณ ์ฃผ์ด์ง ๋ฐฐ์ด ๋ด์์ ์์๋ค์ ์์น๋ง ๊ตํํ๊ธฐ ๋๋ฌธ์
๋๋ค.
ํน์ง
โข
์์ ์ฑ: ๋ถ์์ ์ ๋ ฌ
โข
์ ์๋ฆฌ ์ ๋ ฌ: ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ํ์ ์์
โข
ํญ์ O(nยฒ)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง (์ต์ , ํ๊ท , ์ต์
๋ชจ๋ ๋์ผ)