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