์์ ๋ ฌ์ด๋, ์ ํ์ ๋ ฌ์ ์ธ์ ํ ๋ ์ฝ๋๋ฅผ ๋ฐ๊ฟ ๊ทธ๋ฃน์ ๋๋์ด, ๊ทธ๋ฃน๋ง๋ค์ ์ ํ์ ๋ ฌ์ ์ํํ๋ ์ ๋ ฌ ๋ฐฉ์์ ํตํด ๋๋ ค์ง์ ์ํํ ์ ๋ ฌ ๋ฐฉ์์ด๋ค. ( ์ ์ ๋ ฌ์ ๊ฒฝ์ฐ ๊ทธ๋ฃน์ ํฌ๊ธฐ๋งํผ ๋ ์ฝ๋ ์ด๋์ด ๊ฐ๋ฅํด์ง! )
void ShellSort(int A[], int n){
//์
๋ ฅ : A[0:n-1],n: ์ ๋ ฌํ ์์์ ๊ฐ์
//์ถ๋ ฅ : A[0:n-1] : ์ ๋ ฌ๋ ๋ฐฐ์ด
int h,i,j,Value;
h=1;
do h = 3*h+1; while (h < n);
//n์ ๋์ง ์๋ h๊ฐ์ ์ฐพ์์ ์งํ
//n์ด 15๋ผ๋ฉด, h=13 -> h->4 -> h=1๋ก ์งํ๋๋ค.
do {
h=h/3;
for (i=h; i<n; i++){
Value = A[i];
j=i;
while(A[j-h]>Value){
A[j]=A[j-h];
j -= h;
if (j<h) break;
} A[j] = Value;
}
while (h>1);
n์ ๋์ง ์๋ h๊ฐ์ ์ฐพ์์ ์งํํ๋ค.
์ ํ์ ๋ ฌ๊ณผ์ ์ฐจ์ด์ : ์ด์ ๊ฐ๊ณผ ๋ฐ๊พธ๋ ๊ฒ์ด ์๋ ์ด์ ๊ทธ๋ฃน์ ๊ฐ์ ์์์ ๊ฐ๊ณผ ๋น๊ตํ๋ฉฐ ์กฐ๊ฑด์ ๋ถํฉํ๋ค๋ฉด ์๋ฆฌ๋ฅผ ๋ฐ๊พธ๊ธฐ ๋๋ฌธ์ ํจ์ฌ ๋น ๋ฅด๋ค.
- ์ ์๋ฆฌ์ฑ : ์ ์๋ฆฌ ์ ๋ ฌ (์์ํฌ๊ธฐ ๋ฉ๋ชจ๋ฆฌ)
- ์์ ์ฑ : ๋ถ์์ ํ ์ ๋ ฌ (์ธ์ ํ ๋ ์ฝ๋์ ์๋ฆฌ๋ฐ๊พธ๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ)
- ์ต์ ์๊ฐ๋ณต์ก๋ : n์3/2์ ๊ณฑ (์ค์ ์ ๋ ฌ์ ์ฑ๋ฅ์ h๊ฐ ์ค์ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.)
'์๊ณ ๋ฆฌ์ฆ๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ๋ฒ๋ธ์ ๋ ฌ(Bubble Sort) (0) | 2023.09.11 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ์ ํ์ ๋ ฌ (SelectionSort) (0) | 2023.09.11 |
[์๊ณ ๋ฆฌ์ฆ] ์๊ณ ๋ฆฌ์ฆ์ด๋? (0) | 2023.09.11 |