728x90
์ ํ์ ๋ ฌ
- ์ ๋ ฌ๋ ์ผ์ชฝ ๋ฆฌ์คํธ์ ์ ๋ ฌ์๋ ์ค๋ฅธ์ชฝ ๋ฆฌ์คํธ๋ก ๋๋์ด ์ ๋ ฌ
- ์ด๊ธฐ์๋ ์ผ์ชฝ ๋ฆฌ์คํธ๋ ๋น์ด์๊ณ ์ ๋ ฌํ ์ซ์๋ค์ ๋ชจ๋ ์ค๋ฅธ์ชฝ ๋ฆฌ์คํธ์ ์กด์ฌํ๋ค.
- In-place ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ํ๋ (์ ๋ ฅ๋ฐฐ์ด ์ด์ธ์ ๋ค๋ฅธ ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๊ตฌํ์ง ์๋ ์ ๋ ฌ ๋ฐฉ๋ฒ)
- ์์๋ฅผ ๋ฃ์ ์์น๋ ์ด๋ฏธ ์ ํด์ ธ์๊ณ ์ด๋ค ์์๋ฅผ ๋ฃ์์ง "์ ํ"ํ๋ ์๊ณ ๋ฆฌ์ฆ
- ์ค๋ฅธ์ชฝ๋ฆฌ์คํธ์์ ์ต์๊ฐ์ ์ ํํ์ฌ ์ผ์ชฝ ๋ฆฌ์คํธ๋ก ์์๋๋ก ์ฎ๊ธฐ๋ ๋ฐฉ์์ด๋ค.
์ ํ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ๊ณผ์
- ์ ํ ์ ๋ ฌ์ ์ฒซ ๋ฒ์งธ ์๋ฃ๋ฅผ ๋ ๋ฒ์งธ ์๋ฃ๋ถํฐ ๋ง์ง๋ง ์๋ฃ๊น์ง ์ฐจ๋ก๋๋ก ๋น๊ตํ์ฌ ๊ฐ์ฅ ์์ ๊ฐ์ ์ฐพ์ ์ฒซ ๋ฒ์งธ์ ๋๊ณ , ๋ ๋ฒ์งธ ์๋ฃ๋ฅผ ์ธ ๋ฒ์งธ ์๋ฃ๋ถํฐ ๋ง์ง๋ง ์๋ฃ๊น์ง์ ์ฐจ๋ก๋๋ก ๋น๊ตํ์ฌ ๊ทธ ์ค ๊ฐ์ฅ ์์ ๊ฐ์ ์ฐพ์ ๋ ๋ฒ์งธ ์์น์ ๋๋ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉฐ ์ ๋ ฌ์ ์ํํ๋ค.
- 1ํ์ ์ ์ํํ๊ณ ๋๋ฉด ๊ฐ์ฅ ์์ ๊ฐ์ ์๋ฃ๊ฐ ๋งจ ์์ ์ค๊ฒ ๋๋ฏ๋ก ๊ทธ ๋ค์ ํ์ ์์๋ ๋ ๋ฒ์งธ ์๋ฃ๋ฅผ ๊ฐ์ง๊ณ ๋น๊ตํ๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก 3ํ์ ์์๋ ์ธ ๋ฒ์งธ ์๋ฃ๋ฅผ ์ ๋ ฌํ๋ค.
#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996)
int main() {
int arr[5] = {9,6,7,3,5};
int i,j, min, temp;
for(i=0; i< 5;i++){
min = i;
for(j=i+1; j<5; j++)
if(arr[j] < arr[min])
min = j;
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
for(int i=0; i< 5;i++){
printf("%d ", arr[i]);
}
}
์ ํ์ ๋ ฌ ํน์ง ๋ฐ ์๊ฐ ๋ณต์ก๋
๋น๊ต ํ์
๋ ๊ฐ์ for ๋ฃจํ์ ์คํ ํ์
์ธ๋ถ ๋ฃจํ: (n-1)๋ฒ
๋ด๋ถ ๋ฃจํ(์ต์๊ฐ ์ฐพ๊ธฐ): n-1, n-2, … , 2, 1 ๋ฒ
๊ตํ ํ์
์ธ๋ถ ๋ฃจํ์ ์คํ ํ์์ ๋์ผ. ์ฆ, ์์ ์๊ฐ ์์
ํ ๋ฒ ๊ตํํ๊ธฐ ์ํ์ฌ 3๋ฒ์ ์ด๋(SWAP ํจ์์ ์์ )์ด ํ์ํ๋ฏ๋ก 3(n-1)๋ฒ
T(n) = (n-1) + (n-2) + … + 2 + 1 = n(n-1)/2 = O(n^2)
๋ ๊ฐ์ for ๋ฃจํ์ ์คํ ํ์
์ธ๋ถ ๋ฃจํ: (n-1)๋ฒ
๋ด๋ถ ๋ฃจํ(์ต์๊ฐ ์ฐพ๊ธฐ): n-1, n-2, … , 2, 1 ๋ฒ
๊ตํ ํ์
์ธ๋ถ ๋ฃจํ์ ์คํ ํ์์ ๋์ผ. ์ฆ, ์์ ์๊ฐ ์์
ํ ๋ฒ ๊ตํํ๊ธฐ ์ํ์ฌ 3๋ฒ์ ์ด๋(SWAP ํจ์์ ์์ )์ด ํ์ํ๋ฏ๋ก 3(n-1)๋ฒ
T(n) = (n-1) + (n-2) + … + 2 + 1 = n(n-1)/2 = O(n^2)
728x90