TEST/자료구조와 함께 배우는 알고리즘 입문(C언어)

<6> Q12. 자료구조와 함께 배우는 알고리즘 입문 (C언어)

도라몬즈 2021. 2. 11. 21:13
#include <stdio.h>
#include <stdlib.h>

void shell(int a[], int n)
{
    int i, j, h,count=0;
    for (h=n/2; h > 0; h /= 2)
        for (i = h; i < n; i++)
        {
            int tmp = a[i];
            for (j = i - h; j >= 0 && a[j] > tmp; j -= h)
                a[j + h] = a[j];
            a[j + h] = tmp;
            count+=2;
        }
        printf("이동 횟수 : %d\n",count);
}

int main(void)
{
    int i, nx;
    int *x;

    puts("셀 정렬");
    printf("요소 개수 : ");
    scanf("%d", &nx);
    x = calloc(nx, sizeof(int));

    for (i = 0; i < nx; i++)
    {
        printf("x[%d] : ", i);
        scanf("%d", &x[i]);
    }
    shell(x, nx);

    puts("오름차순으로 정렬했습니다.");
    for (i = 0; i < nx; i++)
        printf("x[%d] = %d\n", i, x[i]);
    free(x);

    return 0;
}

 

#include <stdio.h>
#include <stdlib.h>

void shell(int a[], int n)
{
    int i, j, h,count=0;
    for (h = 1; h < n / 9; h = h * 3 + 1)
        ;
    for (; h > 0; h /= 3)
        for (i = h; i < n; i++)
        {
            int tmp = a[i];
            for (j = i - h; j >= 0 && a[j] > tmp; j -= h)
                a[j + h] = a[j];
            a[j + h] = tmp;
            count+=2;
        }
        printf("이동 횟수 : %d\n",count);
}

int main(void)
{
    int i, nx;
    int *x;

    puts("셀 정렬");
    printf("요소 개수 : ");
    scanf("%d", &nx);
    x = calloc(nx, sizeof(int));

    for (i = 0; i < nx; i++)
    {
        printf("x[%d] : ", i);
        scanf("%d", &x[i]);
    }
    shell(x, nx);

    puts("오름차순으로 정렬했습니다.");
    for (i = 0; i < nx; i++)
        printf("x[%d] = %d\n", i, x[i]);
    free(x);

    return 0;
}