쉘 정렬 (Shell Sort)
쉘 정렬은 삽입 정렬 알고리즘을 이용하는 정렬 방식입니다.
쉘 정렬은 같은 간격에 있는 원소들을 삽입 정렬 원리로 정렬하는 것을 반복합니다.
간격의 초기값은 배열의 크기/2이며 간격이 1일 때까지 1/2로 줄이면서 반복합니다.
쉘정렬
//쉘 정렬(Shell Sort)
#include <stdio.h>
#define SWAP(a,b) {int t; t = a; a=b; b=t;}//a와 b를 교환
int *origin;
int on;
void ShellSort(int *base, int n);
int main(void)
{
int arr[10] = { 9,4,3,10,5,8,7,6,2,1 };
origin = arr;
on = 10;
ShellSort(arr, 10);
return 0;
}
void InsertionSort2(int *base, int size, int step);
void ViewArr(int *arr, int n);
void ShellSort(int *base, int size)
{
int i, step;
for (step = size / 2; step>0; step /= 2)//step의 폭을 1/2로 줄여간다.
{
printf("step:%d\n", step);
for (i = 0; i<step; i++) //step 간격에 있는 요소들을 삽입정렬
{
InsertionSort2(base + i, size - i, step);
}
}
}
void InsertionSort2(int *base, int size, int step)
{
int i, j;
for (i = step; i<size; i += step)//정렬 대상 원소는 step 간격으로 이동
{
for (j = i; j>0; j -= step)//step 간격으로 앞으로 이동
{
if (base[j - step]>base[j])//앞쪽이 더 클 때
{
SWAP(base[j - step], base[j]);//교환
ViewArr(origin, on);
}
else
{
break;
}
}
}
}
void ViewArr(int *arr, int n)
{
int i = 0;
for (i = 0; i<n; i++)
{
printf("%2d ", arr[i]);
}
printf("\n");
}
'언어 자료구조 알고리즘 > C언어 예제' 카테고리의 다른 글
[C언어 소스] 성적 관리 프로그램 4가지 유형 (0) | 2016.04.29 |
---|---|
[C언어] 순차 정렬, 버블 정렬, 선택 정렬, 삽입 정열, 쉘 정렬, 퀵 정렬, 병합 정렬, 힙 정렬) (0) | 2016.04.16 |
[C언어 소스] 힙 정렬(Heap Sort) 알고리즘 (1) | 2016.04.11 |
[C언어 소스] 병합 정렬(Merge Sort, 합병 정렬) 알고리즘 (0) | 2016.04.11 |
[C언어 소스] 퀵 정렬 (Quick Sort) 알고리즘 (0) | 2016.04.11 |
[C언어 소스] 삽입 정렬(Insertion Sort) 알고리즘 (0) | 2016.04.11 |
[C언어 소스] 선택 정렬(Selection Sort) 알고리즘 (0) | 2016.04.11 |
[C언어 소스] 버블 정렬 (Bubble Sort) 알고리즘 (0) | 2016.04.11 |
[C언어 소스] 순차 정렬(Sequential Sort) 알고리즘 (0) | 2016.04.11 |
이진 탐색 트리 운행, C언어 소스 (0) | 2016.04.04 |