셸 정렬 알고리즘(Shell Sort Algorithm)
셸 정렬 알고리즘은 삽입 정렬 알고리즘의 단점을 극복할 수 있도록 일부를 개선한 정렬 알고리즘입니다. 이 알고리즘의 성능은 삽입 정렬 알고리즘과는 비교도 되지 않을 정도로 우수합니다.
셸 정렬은 주어진 배열을 일정 그룹으로 나눠서 1차 정렬을 하고, 1차 정렬한 배열을 다시 더 잘게 나눠서 2차 정렬을 하는 과정을 반복하는 정렬입니다. 표로 보면 이렇습니다.
여기서 Skip은 배열을 어느 단위로 건너뛰어서 그룹을 만들건지를 말합니다. 즉, 위에서는 1번째에서는 4씩 건너뛰고, 2번째에서는 4/3+1인 2씩 건너뛴다는 것을 말하죠. 이렇게 비교하면서 정렬하면 비교 횟수나 데이터의 이동 횟수가 훨씬 줄어듭니다.
셸 정렬은 주어진 배열을 일정 그룹으로 나눠서 1차 정렬을 하고, 1차 정렬한 배열을 다시 더 잘게 나눠서 2차 정렬을 하는 과정을 반복하는 정렬입니다. 표로 보면 이렇습니다.
1
|
5
|
9
|
4
|
3
|
8
|
2
|
7
|
6
|
0
| |
(Skip=10/3+1) 1-1
|
1
|
3
|
6
| |||||||
1-2
|
0
|
5
|
8
| |||||||
1-3
|
2
|
9
| ||||||||
1-4
|
4
|
7
| ||||||||
1st Result
|
1
|
0
|
2
|
4
|
3
|
5
|
9
|
7
|
6
|
8
|
(Skip=Skip/3+1) 2-1
|
1
|
2
|
3
|
6
|
9
| |||||
2-2
|
0
|
4
|
5
|
7
|
8
| |||||
2nd Result
|
1
|
0
|
2
|
4
|
3
|
5
|
6
|
7
|
9
|
8
|
(Skip=Skip/3+1) Final
|
0
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
*셸 정렬에서 데이터를 나누는 값의 방식은 N/2와 N/3+1이 대중적인데, N/2보다 N/3+1이 더 빠르답니다.
댓글
댓글 쓰기