#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, exchg = 0;
for (i = 0; i < n - 1; i++)
{
exchg = 0;
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++;
exchg++;
}
else
{
printf("%3c", '-');
for (int k = j; k < n; k++)
printf("%3d", a[k]);
}
compare++;
printf("\n");
}
if (exchg == 0)
break;
}
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;
}