본문 바로가기

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

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

#include <stdio.h>
#include <stdlib.h>
#define swap(type, x, y) \
    do                   \
    {                    \
        type t = x;      \
        x = y;           \
        y = t;           \
    } while (0)

void bubble(int a[], int n)
{
    int i, j, k;
    int compare = 0, change = 0;
    for (i = 0; i < n - 1; i++)
    {
        printf("패스%d:\n", i + 1);

        for (j = n - 1; j > i; j--)
        {
            for (k = 0; k < j; k++)
                printf("%3d", a[k]);
            if (a[j - 1] > a[j])
            {
                printf("%3c", '+');
                for (k = j; k < n; k++)
                    printf("%3d", a[k]);
                swap(int, a[j - 1], a[j]);
                change++;
            }
            else
            {
                printf("%3c", '-');
                for (int k = j; k < n; k++)
                    printf("%3d", a[k]);
            }
            compare++;
            printf("\n");
        }
    }
    printf("비교를 %d회 했습니다.\n교환을 %d회 했습니다.", compare, change);
}

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]);
    }

    bubble(x, nx);

    free(x);

    return 0;
}