CHANGEL
SOLID BASICS
CHANGEL

공지사항

  • DEV.CHANGEL PROFILE
  • SOLID BASIC (289)
    • 공부 STUDY (115)
      • JAVA (57)
      • C | C++ (34)
      • CS (11)
      • MySQL (2)
      • ALGORITHM (1)
      • HTML (2)
      • CSS (2)
      • JS (2)
      • CODING (0)
      • MINI PROJECT (3)
    • 스프링 SPRING (21)
      • [SPRING] 김영한 스프링 입문 (11)
      • [SPRING] 남궁성 스프링의 정석 (1)
      • [SPRING] 스프링 핵심원리 (9)
    • 전공 수업 CS (65)
      • Computer Network (13)
      • algorithms (21)
      • Computer Architecture (7)
      • Software Engineering (4)
      • Data Structure (2)
      • DataBase (1)
      • Digital Engineering (14)
      • Discrete Mathematics (3)
      • Introduction to programming (0)
      • Mobile Software (0)
      • Intelligence and Informatio.. (0)
    • 대외활동 (35)
      • 신한은행 대학생 홍보대사 34기 (8)
      • SKT T프렌즈 5기 (13)
      • SK DEVOTION YOUNG 1기 (9)
      • 성균관 대학교 공학교육혁신센터 수강 (3)
      • 수상 기록 (1)
    • 솝트 33기 안드로이드 (7)
      • [솝트 33기] 회고록 (0)
      • [솝트 33기] 안드로이드 왕초보 스터디 (2)
      • [솝트 33기] 코틀린 스터디 (0)
      • [솝트 33기] Git을 털어보자 깃털 스터디 (4)
    • 멋쟁이사자처럼 11기 (6)
      • 멋사 회고록 (4)
      • 백엔드 세션 (1)
      • 기획 세션 (1)
      • 연합해커톤 운영단 (기획팀) (0)
    • 백준 BAEKJOON (16)
    • 독서 BOOK (10)
    • 자격증 CERTIFICATE (1)
    • 준비 서류 및 회고록 MEMOIR (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

최근 댓글

인기 글

CHANGEL

SOLID BASICS

전공 수업 CS/algorithms

[알고리즘] 쉘 정렬 알고리즘

2022. 10. 11. 19:48

쉘 정렬 알고리즘은 삽입정렬을 간단하게 변형한 것입니다.

원소의 비교 연산과 먼 거리로의 원소 이동을 줄이려는 목적을 가진 알고리즘입니다.

인덱스 간격은 쉽게 계산 가능해야하고, 홀수와 짝수가 번갈아 나오면서 순차되는 것이 좋습니다.

 

ADL

shellSort(a[], n)
	for(h <- 1; 3*h+1 < n; h <- 3*h+1) do {}; // 첫 번째 h 값 계산
    for( ; h > 0; h <- h/3) do { // h 값을 감소시키면서 진행
    	for (i <- h + 1; i <= n ; i <- i+1) do {
        v <- a[i];
        j <- i;
        while (j > h and a[j-h] > v) do { 
        	a[j] <- a[j-h];
            j <- j-h;
        }
        a[j] <- v;
        }
       }
end shellSort()

쉘 정렬 알고리즘 여러개의 서브리스트로 분할하는 것에서 시작하여, 마지막 단계에서는 배열 전체에 대해 삽입 정렬을 적용 시킨다.

최선의 경우 성능은 O(NlogN)이고, 평균적인 경우는 O(N^4/3), 최악의 경우는 O(N^3/2)으로 알려져있다.

 

제자리 정렬

 

멀리있는 원소끼리 교환하기에 안정적인 알고리즘은 아님

 

PYTHON

def shellShort(a,n):
	h=1
    while 3*h+1 < n:
    	h = 3*h+1
    while h > 0 :
    	h = h/3
    	for i in range(h+1, n+1):
			v, j = a[i], i
            while j > h and a[j-h] > v:
            	a[j]=a[j-h]
                j -= h
            a[h] = v
        h=int(h/3)

*** 쉘정렬 더 이해 필요*** 

'전공 수업 CS > algorithms' 카테고리의 다른 글

[알고리즘] 스트링 처리 알고리즘 | 보이어 무어 알고리즘  (0) 2022.11.10
[알고리즘] 스트링 처리 알고리즘 | KMP 알고리즘  (0) 2022.11.10
[알고리즘] 삽입 정렬 알고리즘  (1) 2022.10.11
[알고리즘] 버블정렬  (0) 2022.10.11
[알고리즘] 선택 정렬 알고리즘  (0) 2022.10.11
    '전공 수업 CS/algorithms' 카테고리의 다른 글
    • [알고리즘] 스트링 처리 알고리즘 | 보이어 무어 알고리즘
    • [알고리즘] 스트링 처리 알고리즘 | KMP 알고리즘
    • [알고리즘] 삽입 정렬 알고리즘
    • [알고리즘] 버블정렬
    CHANGEL
    CHANGEL
    NOT GIVING UP | SOLID BASICS

    티스토리툴바