셸 정렬(Shell Sort)에 대해 알아보자!

2024. 4. 1. 00:07· C#/알고리즘 기초 익히기
목차
  1. 셸 정렬
  2. 셸 정렬 C# 코드

셸 정렬

  • 오름차순을 기준으로 정렬.
  • 삽입정렬을 보완한 알고리즘.
  • 배열을 일정한 기준의 간격으로 분류(부분 리스트를 생성).
  • 부분 리스트에서 삽입정렬을 수행.
  • 이 과정을 간격이 1일때까지 반복 수행.

<이미지 출처: https://gmlwjd9405.github.io/images/algorithm-shell-sort/shell-sort.png>


셸 정렬 C# 코드

public void Shell_Sort(int[] array)
    {
        //1.매개변수 배열의 크기의 절반만큼 갭을 만든다.
        int gap;

        for (int i = array.Length / 2; i > 0; i = i / 2)
        {
            gap = i;

            //갭이 짝수면 갭+1. ex)배열크기=11. 갭=5,3,1
            if (gap % 2 == 0)
            {
                gap++;
            }

            for (int k = 0; k < gap; k++)
            {
                Shell_Insert_Sort(array, k, gap);
            }
        }

    }
    public void Shell_Insert_Sort(int[] array, int first, int gap)
    {
        int temp;

        for (int i = first + gap; i < array.Length; i += gap)
        {
            temp = array[i];

            for (int k = i - gap; k >= first && array[k] > temp; k -= gap)
            {
                temp = array[k + gap];
                array[k + gap] = array[k];
                array[k] = temp;
            }
        }
    }

 

  • 장점
    - 연속적이지 않은 부분 리스트에서 자료의 교환이 일어나면 비교적 더 큰 거리를 이동.
    - 부분 리스트에서 어느 정도 정렬을 해놓은 상태이기 때문에 기존 단순 삽입 정렬보다 더욱 빠른 수행능력.
    - 알고리즘이 간단하여 쉽게 구현 가능.

<이미지 출처: https://gmlwjd9405.github.io/images/algorithm-shell-sort/sort-time-complexity.png>


 

'C# > 알고리즘 기초 익히기' 카테고리의 다른 글

힙 정렬(Heap Sort)에 대해 알아보자!  (0) 2024.04.01
병합 정렬(Merge Sort)에 대해 알아보자!  (0) 2024.04.01
퀵 정렬(Quick Sort)에 대해 알아보자!  (0) 2024.04.01
삽입 정렬(Insert Sort)에 대해 알아보자!  (0) 2024.03.31
선택 정렬(Select Sort)에 대해 알아보자!  (0) 2024.03.31
  1. 셸 정렬
  2. 셸 정렬 C# 코드
'C#/알고리즘 기초 익히기' 카테고리의 다른 글
  • 힙 정렬(Heap Sort)에 대해 알아보자!
  • 병합 정렬(Merge Sort)에 대해 알아보자!
  • 퀵 정렬(Quick Sort)에 대해 알아보자!
  • 삽입 정렬(Insert Sort)에 대해 알아보자!
ForMan_
ForMan_
C# 언어로 프로그래머스 문제를 풀이하고, Unity 엔진으로 게임을 개발하며, 자료구조를 공부하는 과정을 반복문처럼 꾸준히 탐구하고 공유하는 '반복해서 노력하는 남자, ForMan'의 블로그입니다.
ForMan_
반복해서 노력하는 남자, ForMan
ForMan_
전체
오늘
어제
  • 분류 전체보기
    • C#
      • 프로그래머스 코딩 문제 풀이
      • 자료구조 이해하기
      • 알고리즘 기초 익히기
    • Unity
      • Unity 디자인 패턴
      • Unity 타워디펜스게임 프로젝트
      • Unity 물리기반 Merge게임 프로젝트(수박라..
      • Unity FPS게임 프로젝트(오버워치라이크)
    • UI
      • 젠레스존제로 UI작업 시작
      • 젠레스존제로 UI 이펙트 작업
      • 젠레스존제로 UI 사운드 작업
      • 젠레스존제로 UI 스크롤뷰 작업(메뉴창)

블로그 메뉴

  • 홈
  • 방명록
  • 태그

최근 글

최근 댓글

인기 글

태그

  • 프로그래머스
  • 머쓱이
  • c#
  • 유니티디자인패턴
  • 과일합치기
  • 오버워치만들기
  • 코딩테스트
  • 동적프로그래밍
  • 타워디펜스게임
  • 완전탐색
  • 오버워치
  • 정렬알고리즘
  • 유니티게임프로젝트
  • forman
  • 유니티
  • 수박게임
  • Unity
  • 오름차순
  • 유니티게임
  • 게임프로젝트
Thanks for Skin
hELLO · Designed By 정상우.v4.2.2
ForMan_
셸 정렬(Shell Sort)에 대해 알아보자!
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.