본문 바로가기
old/알고리즘

셸 정렬 알고리즘

by 물 개 2020. 11. 22.

단순 삽입 정렬의 장점(정렬을 마친 상태에 가까울 수록 정렬 속도가 매우 빨라짐)은 그대로 가져가고

단점(삽입할 위치가 멀리 떨어져 있으면 이동해야하는 횟수가 많아짐)을 보완한 알고리즘.

정렬할 배열의 요소를 그룹으로 나눠 각 그룹별로 단순 삽입 정렬을 수행하고, 그 그룹을 합치면서 정렬을 반복하여 요소의 이동 횟수를 줄이는 방법.

 

자바로 구현하기

static void shellSort(int[] a, int n) {
    //각 부분 리스트의 요소가 1이 될 때까지,
    //즉 증분값 h가 1이 될 때까지 전체 반복
    for(int h=n/2; h>0; h/=2) {
        //부분 리스트들끼리 나눠서 반복할 수도 있지만 여기서는
        //전체 요소들을 반복하면서 각 부분 리스트에 맞게 비교 되도록 구현하겠다.
        for(int i=h; i<n; i++) {
            int tmp = a[i];
            int j;
            for(j=i-h; j>=0&&a[j]>tmp; j-=h) {
                a[j+h] = a[j];
            }
            a[j+h] = tmp;
        }
    }
}

 

gmlwjd9405.github.io/2018/05/08/algorithm-shell-sort.html

 

[알고리즘] 셸 정렬(shell sort)이란 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

'old > 알고리즘' 카테고리의 다른 글

알고리즘 (1) 알고리즘의 정의와 중요성  (0) 2023.03.14
병합 정렬(Merge Sort)  (0) 2020.11.23
재귀 알고리즘  (0) 2020.11.17
BM 검색 알고리즘  (0) 2020.11.17
KMP 검색 알고리즘  (0) 2020.11.17

최근댓글

최근글

skin by © 2024 ttuttak