SlideShare a Scribd company logo
1 of 24
Download to read offline
데이터 구조와 알
고리즘
쉘 정렬, 병합 정렬, 힙 정렬
Arnold Moon (arnold.spring@gmail.com)
비교 정렬 알고리즘 중에서 유일하게 2차 복잡도보다 적은
복잡도를 가진 정렬이다.
쉘 정렬은 병합, 힙, 퀵 정렬보다 느리다. 하지만, 5000개 이
하 항목을 정렬할 때 속도가 매우 중요하지만 않다면 좋은
선택이다.
Gap에 따라서 성능에 차이가 있다.
http://en.wikipedia.org/wiki/Shellsort
쉘 정렬
입력을 크기 N의 배열로 가정 했을 때, 입력을
어떤 숫자(Gaps)들로 지속적으로 나눈다. 나누
어진 작은 입력들을 부분적으로 삽입 정렬 한다.
= 큰 리스트를 작은 리스트로 나눈다. 그리고 작
은 리스트들에 대해 삽입 정렬을 수행 한다.
쉘 정렬
쉘 정렬
예제
입력 = [ 62, 83, 18, 53, 07, 17 , 95, 86, 47, 69 ]
N= 10
Gap = 2^k-1 (k >= 1)
= 1,3,7,15,31,63...
쉘 정렬
[ 62, 83, 18, 53, 07, 17 , 95, 86, 47, 69 ]
62 83 18 53 07 17 95 86 47 69
index 1 2 3 4 5 6 7 8 9 10
gap=7 62 47 18 53 07 17 95 86 83 69
gap=3 53 07 17 62 47 18 69 86 83 95
gap=1 07 17 18 47 53 62 69 83 86 95
쉘 정렬
중요한 프로그램에서 가끔 사용한다. 콜스택을
사용하지 않기 때문이다. 임베디드 시스템을 대
상으로 하는 C 표준 라이브러리의 qsort에서
quick sort대신 사용 한다.(예를 들어 uClibc 라이
브러리). 비슷한 이유로 리눅스 커널에도 아직
있다.
병합 정렬
퀵 소트의 문제점을 보완하기 위해서 나왔다.
퀵 소트의 가장 큰 문제는 최악의 경우에 복잡도
가 O(n^2)이라는 것이다.
스택이 필요 없는 안정적인 알고리즘이다.
devide and conquer를 사용 한다.
병합 정렬
안정적이다?
모든 원소를 작은 부분으로 쪼갠 다음에 다시
하나로 합친다.
병합 정렬
병합 정렬
[ 62, 83, 18, 53, 07, 17 , 95, 86, 47, 69 ]
62 83 18 53 07 17 95 86 47 69
62 83 18 53 07 17 95 86 47 69
62 83 18 53 07 17 95 86 47 69
18 62 83 07 17 53 95 47 69 86
07 17 18 53 62 83 95 47 69 86
07 17 18 47 53 62 69 83 86 95
힙 정렬 - 조건
트리
힙
힙 정렬 - 트리
각 노드가 여러 개의 노드를 가
리키는 데이터 구조.
노드의 값이 자식 노드의 값보
다 크거나 같다.
트리의 높이 h > 0 일 때 모든
잎 노드들이 h 또는 h-1레벨에
있어야 한다.(완전 이진 트리)
힙 정렬 - 힙
힙 정렬
입력을 힙으로 만든다.
힙의 최상위 에 있는 값이 최대이다.
최대 값과 맨 뒤에 있는 값의 위치를 바꾼다.
최대 값을 제외한 입력을 힙으로 만든다.힙의 최상위 에 있는 값이 최대이다.
최대 값과 맨 뒤에 있는 값의 위치를 바꾼다.
최대 값을 제외한 입력을 힙으로 만든다.
...
힙 정렬
[ 6, 5, 4, 1, 8, 7, 2, 4 ]
[ 8, 6, 7, 4, 5, 3, 2, 1]
[ 1, 6, 7, 4, 5, 3, 2, 8]
[ 1, 6, 7, 4, 5, 3, 2]
8
6 7
4 5 3 2
1
힙 정렬
[ 1, 6, 7, 4, 5, 3, 2 ]
[ 7, 6, 3, 4, 5, 1, 2 ]
[ 2, 6, 3, 4, 5, 1, 7 ]
[ 2, 6, 3, 4, 5, 1 ]
1
6 7
4 5 3 2
7
6 3
4 5 1 2
힙 정렬
[ 2, 6, 3, 4, 5, 1 ]
[ 6, 5, 3, 4, 2, 1 ]
[ 1, 5, 3, 4, 2, 6 ]
[ 1, 5, 3, 4, 2 ]
2
6 3
4 5 1
6
5 3
4 2 1
힙 정렬
[ 1, 5, 3, 4, 2 ]
[ 5, 4, 3, 1, 2 ]
[ 2, 4, 3, 1, 5 ]
[ 2, 4, 3, 1 ]
1
5 3
4 2
5
4 3
1 2
힙 정렬
[ 2, 4, 3, 1 ]
[ 4, 2, 3, 1 ]
[ 1, 2, 3, 4 ]
[ 1, 2, 3 ]
2
4 3
1
4
2 3
1
힙 정렬
[ 1, 2, 3 ]
[ 3, 2, 1 ]
[ 1, 2, 3 ]
[ 1, 2 ]
1
2 3
3
2 1
힙 정렬
[ 1, 2 ]
[ 2, 1 ]
[ 1, 2 ]
[ 1 ]
1
2
2
1
힙 정렬
[ 1 ]
끝
1
힙 정렬
힙 정렬은 퀵 정렬과 가장 먼저 비교 가능한 일반적인 비교
정렬 알고리즘이다.
worst-case 에서 O(nlogn)이고, 병합정렬과 다르게 상수 만
큼의 공간을 요구 한다. 따라서, 보안을 신경 쓰는 시스템이
나, 리얼타임 제약 사항이 있는 임베디드 시스템에서는 종종
힙 정렬을 사용 한다.
끝

More Related Content

Viewers also liked

[11 0212] 정렬, 선택, 탐색 알고리즘
[11 0212] 정렬, 선택, 탐색 알고리즘[11 0212] 정렬, 선택, 탐색 알고리즘
[11 0212] 정렬, 선택, 탐색 알고리즘SeungMin Yang
 
Tecnologia- Fitxa Tècnica Vehicle Elèctric
Tecnologia- Fitxa Tècnica Vehicle ElèctricTecnologia- Fitxa Tècnica Vehicle Elèctric
Tecnologia- Fitxa Tècnica Vehicle Elèctricbantuguimcaste
 
Encontre de teatre a l'estiu 2013
Encontre de teatre a l'estiu 2013Encontre de teatre a l'estiu 2013
Encontre de teatre a l'estiu 2013Jose Angel Gomis
 
Http tango aplicaciones android
Http tango aplicaciones androidHttp tango aplicaciones android
Http tango aplicaciones androidchaveroavila
 
Apresentação institucional 2012
Apresentação institucional 2012Apresentação institucional 2012
Apresentação institucional 2012comgasri
 
картина
картинакартина
картинаkfhbcf1605
 
Medallas De Olimpicas 2008
Medallas De Olimpicas 2008Medallas De Olimpicas 2008
Medallas De Olimpicas 2008guest05427d
 
El Poder Del Pensamiento
El Poder Del PensamientoEl Poder Del Pensamiento
El Poder Del PensamientoEnrique
 
Hotel rarotonga
Hotel rarotongaHotel rarotonga
Hotel rarotongagocook1010
 
Apresentação resultados 3 t08
Apresentação resultados 3 t08Apresentação resultados 3 t08
Apresentação resultados 3 t08comgasri
 
Programa Estadual de Fiscalização do Monitoramento e Controle de Moscas-das-F...
Programa Estadual de Fiscalização do Monitoramento e Controle de Moscas-das-F...Programa Estadual de Fiscalização do Monitoramento e Controle de Moscas-das-F...
Programa Estadual de Fiscalização do Monitoramento e Controle de Moscas-das-F...Izabella Menezes
 

Viewers also liked (18)

[11 0212] 정렬, 선택, 탐색 알고리즘
[11 0212] 정렬, 선택, 탐색 알고리즘[11 0212] 정렬, 선택, 탐색 알고리즘
[11 0212] 정렬, 선택, 탐색 알고리즘
 
Tecnologia- Fitxa Tècnica Vehicle Elèctric
Tecnologia- Fitxa Tècnica Vehicle ElèctricTecnologia- Fitxa Tècnica Vehicle Elèctric
Tecnologia- Fitxa Tècnica Vehicle Elèctric
 
Encontre de teatre a l'estiu 2013
Encontre de teatre a l'estiu 2013Encontre de teatre a l'estiu 2013
Encontre de teatre a l'estiu 2013
 
Donald's donuts
Donald's donutsDonald's donuts
Donald's donuts
 
Http tango aplicaciones android
Http tango aplicaciones androidHttp tango aplicaciones android
Http tango aplicaciones android
 
Cartell bouesia al matarranya gran
Cartell bouesia al matarranya granCartell bouesia al matarranya gran
Cartell bouesia al matarranya gran
 
Apresentação institucional 2012
Apresentação institucional 2012Apresentação institucional 2012
Apresentação institucional 2012
 
Ingles verb can
Ingles verb canIngles verb can
Ingles verb can
 
картина
картинакартина
картина
 
Ambilim
AmbilimAmbilim
Ambilim
 
Medallas De Olimpicas 2008
Medallas De Olimpicas 2008Medallas De Olimpicas 2008
Medallas De Olimpicas 2008
 
18
1818
18
 
El Poder Del Pensamiento
El Poder Del PensamientoEl Poder Del Pensamiento
El Poder Del Pensamiento
 
Cynthia trabajo excel 1
Cynthia trabajo excel 1Cynthia trabajo excel 1
Cynthia trabajo excel 1
 
Junk car
Junk car Junk car
Junk car
 
Hotel rarotonga
Hotel rarotongaHotel rarotonga
Hotel rarotonga
 
Apresentação resultados 3 t08
Apresentação resultados 3 t08Apresentação resultados 3 t08
Apresentação resultados 3 t08
 
Programa Estadual de Fiscalização do Monitoramento e Controle de Moscas-das-F...
Programa Estadual de Fiscalização do Monitoramento e Controle de Moscas-das-F...Programa Estadual de Fiscalização do Monitoramento e Controle de Moscas-das-F...
Programa Estadual de Fiscalização do Monitoramento e Controle de Moscas-das-F...
 

Similar to Shell, merge, heap sort

알고리즘 스터디(정렬) Seungdols
알고리즘 스터디(정렬) Seungdols알고리즘 스터디(정렬) Seungdols
알고리즘 스터디(정렬) Seungdolsseungdols
 
퀵 정렬 알고리즘 기초
퀵 정렬 알고리즘 기초퀵 정렬 알고리즘 기초
퀵 정렬 알고리즘 기초Dongyi Kim
 
[Algorithm] Quick Sort
[Algorithm] Quick Sort[Algorithm] Quick Sort
[Algorithm] Quick SortBill Kim
 
[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디대영 노
 
[Algorithm] Heap Sort
[Algorithm] Heap Sort[Algorithm] Heap Sort
[Algorithm] Heap SortBill Kim
 
[Algorithm] Selection Sort
[Algorithm] Selection Sort[Algorithm] Selection Sort
[Algorithm] Selection SortBill Kim
 
세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter
세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter
세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 WinterSuhyun Park
 
R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작Terry Cho
 
amugona study 2nd
amugona study 2ndamugona study 2nd
amugona study 2ndwho7117
 
Lecture 3: Unsupervised Learning
Lecture 3: Unsupervised LearningLecture 3: Unsupervised Learning
Lecture 3: Unsupervised LearningSang Jun Lee
 
HI-ARC PS 102 Brute Force
HI-ARC PS 102 Brute ForceHI-ARC PS 102 Brute Force
HI-ARC PS 102 Brute ForceJae-yeol Lee
 

Similar to Shell, merge, heap sort (14)

알고리즘 스터디(정렬) Seungdols
알고리즘 스터디(정렬) Seungdols알고리즘 스터디(정렬) Seungdols
알고리즘 스터디(정렬) Seungdols
 
퀵 정렬 알고리즘 기초
퀵 정렬 알고리즘 기초퀵 정렬 알고리즘 기초
퀵 정렬 알고리즘 기초
 
[Algorithm] Quick Sort
[Algorithm] Quick Sort[Algorithm] Quick Sort
[Algorithm] Quick Sort
 
알고리즘
알고리즘알고리즘
알고리즘
 
알고리즘
알고리즘알고리즘
알고리즘
 
[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디
 
[Algorithm] Heap Sort
[Algorithm] Heap Sort[Algorithm] Heap Sort
[Algorithm] Heap Sort
 
[Algorithm] Selection Sort
[Algorithm] Selection Sort[Algorithm] Selection Sort
[Algorithm] Selection Sort
 
세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter
세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter
세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter
 
Quick, Tree sort
Quick, Tree sortQuick, Tree sort
Quick, Tree sort
 
R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작
 
amugona study 2nd
amugona study 2ndamugona study 2nd
amugona study 2nd
 
Lecture 3: Unsupervised Learning
Lecture 3: Unsupervised LearningLecture 3: Unsupervised Learning
Lecture 3: Unsupervised Learning
 
HI-ARC PS 102 Brute Force
HI-ARC PS 102 Brute ForceHI-ARC PS 102 Brute Force
HI-ARC PS 102 Brute Force
 

More from Hyun Jin Moon

Swift 0x19 advanced operators
Swift 0x19 advanced operatorsSwift 0x19 advanced operators
Swift 0x19 advanced operatorsHyun Jin Moon
 
Swift 0x18 access control
Swift 0x18 access controlSwift 0x18 access control
Swift 0x18 access controlHyun Jin Moon
 
Swift 0x14 nested types
Swift 0x14 nested typesSwift 0x14 nested types
Swift 0x14 nested typesHyun Jin Moon
 
Swift 0x0e 초기화
Swift 0x0e 초기화Swift 0x0e 초기화
Swift 0x0e 초기화Hyun Jin Moon
 
Swift 0x0c 서브스크립트
Swift 0x0c 서브스크립트Swift 0x0c 서브스크립트
Swift 0x0c 서브스크립트Hyun Jin Moon
 
Swift 0x02 기본 연산자
Swift 0x02   기본 연산자Swift 0x02   기본 연산자
Swift 0x02 기본 연산자Hyun Jin Moon
 
Swift 0x01 환경 설정
Swift 0x01   환경 설정Swift 0x01   환경 설정
Swift 0x01 환경 설정Hyun Jin Moon
 
Programming challange crypt_kicker
Programming challange crypt_kickerProgramming challange crypt_kicker
Programming challange crypt_kickerHyun Jin Moon
 
Node.js Cloud Service Publish
Node.js Cloud Service PublishNode.js Cloud Service Publish
Node.js Cloud Service PublishHyun Jin Moon
 

More from Hyun Jin Moon (12)

Swift 0x19 advanced operators
Swift 0x19 advanced operatorsSwift 0x19 advanced operators
Swift 0x19 advanced operators
 
Swift 0x18 access control
Swift 0x18 access controlSwift 0x18 access control
Swift 0x18 access control
 
Swift 0x17 generics
Swift 0x17 genericsSwift 0x17 generics
Swift 0x17 generics
 
Swift 0x14 nested types
Swift 0x14 nested typesSwift 0x14 nested types
Swift 0x14 nested types
 
Swift 0x0e 초기화
Swift 0x0e 초기화Swift 0x0e 초기화
Swift 0x0e 초기화
 
Swift 0x0d 상속
Swift 0x0d 상속Swift 0x0d 상속
Swift 0x0d 상속
 
Swift 0x0c 서브스크립트
Swift 0x0c 서브스크립트Swift 0x0c 서브스크립트
Swift 0x0c 서브스크립트
 
Swift 0x02 기본 연산자
Swift 0x02   기본 연산자Swift 0x02   기본 연산자
Swift 0x02 기본 연산자
 
Swift 0x01 환경 설정
Swift 0x01   환경 설정Swift 0x01   환경 설정
Swift 0x01 환경 설정
 
Djang Beginning 2
Djang Beginning 2Djang Beginning 2
Djang Beginning 2
 
Programming challange crypt_kicker
Programming challange crypt_kickerProgramming challange crypt_kicker
Programming challange crypt_kicker
 
Node.js Cloud Service Publish
Node.js Cloud Service PublishNode.js Cloud Service Publish
Node.js Cloud Service Publish
 

Shell, merge, heap sort

  • 1. 데이터 구조와 알 고리즘 쉘 정렬, 병합 정렬, 힙 정렬 Arnold Moon (arnold.spring@gmail.com)
  • 2. 비교 정렬 알고리즘 중에서 유일하게 2차 복잡도보다 적은 복잡도를 가진 정렬이다. 쉘 정렬은 병합, 힙, 퀵 정렬보다 느리다. 하지만, 5000개 이 하 항목을 정렬할 때 속도가 매우 중요하지만 않다면 좋은 선택이다. Gap에 따라서 성능에 차이가 있다. http://en.wikipedia.org/wiki/Shellsort 쉘 정렬
  • 3. 입력을 크기 N의 배열로 가정 했을 때, 입력을 어떤 숫자(Gaps)들로 지속적으로 나눈다. 나누 어진 작은 입력들을 부분적으로 삽입 정렬 한다. = 큰 리스트를 작은 리스트로 나눈다. 그리고 작 은 리스트들에 대해 삽입 정렬을 수행 한다. 쉘 정렬
  • 4. 쉘 정렬 예제 입력 = [ 62, 83, 18, 53, 07, 17 , 95, 86, 47, 69 ] N= 10 Gap = 2^k-1 (k >= 1) = 1,3,7,15,31,63...
  • 5. 쉘 정렬 [ 62, 83, 18, 53, 07, 17 , 95, 86, 47, 69 ] 62 83 18 53 07 17 95 86 47 69 index 1 2 3 4 5 6 7 8 9 10 gap=7 62 47 18 53 07 17 95 86 83 69 gap=3 53 07 17 62 47 18 69 86 83 95 gap=1 07 17 18 47 53 62 69 83 86 95
  • 6. 쉘 정렬 중요한 프로그램에서 가끔 사용한다. 콜스택을 사용하지 않기 때문이다. 임베디드 시스템을 대 상으로 하는 C 표준 라이브러리의 qsort에서 quick sort대신 사용 한다.(예를 들어 uClibc 라이 브러리). 비슷한 이유로 리눅스 커널에도 아직 있다.
  • 7. 병합 정렬 퀵 소트의 문제점을 보완하기 위해서 나왔다. 퀵 소트의 가장 큰 문제는 최악의 경우에 복잡도 가 O(n^2)이라는 것이다. 스택이 필요 없는 안정적인 알고리즘이다. devide and conquer를 사용 한다.
  • 9. 모든 원소를 작은 부분으로 쪼갠 다음에 다시 하나로 합친다. 병합 정렬
  • 10. 병합 정렬 [ 62, 83, 18, 53, 07, 17 , 95, 86, 47, 69 ] 62 83 18 53 07 17 95 86 47 69 62 83 18 53 07 17 95 86 47 69 62 83 18 53 07 17 95 86 47 69 18 62 83 07 17 53 95 47 69 86 07 17 18 53 62 83 95 47 69 86 07 17 18 47 53 62 69 83 86 95
  • 11. 힙 정렬 - 조건 트리 힙
  • 12. 힙 정렬 - 트리 각 노드가 여러 개의 노드를 가 리키는 데이터 구조.
  • 13. 노드의 값이 자식 노드의 값보 다 크거나 같다. 트리의 높이 h > 0 일 때 모든 잎 노드들이 h 또는 h-1레벨에 있어야 한다.(완전 이진 트리) 힙 정렬 - 힙
  • 14. 힙 정렬 입력을 힙으로 만든다. 힙의 최상위 에 있는 값이 최대이다. 최대 값과 맨 뒤에 있는 값의 위치를 바꾼다. 최대 값을 제외한 입력을 힙으로 만든다.힙의 최상위 에 있는 값이 최대이다. 최대 값과 맨 뒤에 있는 값의 위치를 바꾼다. 최대 값을 제외한 입력을 힙으로 만든다. ...
  • 15. 힙 정렬 [ 6, 5, 4, 1, 8, 7, 2, 4 ] [ 8, 6, 7, 4, 5, 3, 2, 1] [ 1, 6, 7, 4, 5, 3, 2, 8] [ 1, 6, 7, 4, 5, 3, 2] 8 6 7 4 5 3 2 1
  • 16. 힙 정렬 [ 1, 6, 7, 4, 5, 3, 2 ] [ 7, 6, 3, 4, 5, 1, 2 ] [ 2, 6, 3, 4, 5, 1, 7 ] [ 2, 6, 3, 4, 5, 1 ] 1 6 7 4 5 3 2 7 6 3 4 5 1 2
  • 17. 힙 정렬 [ 2, 6, 3, 4, 5, 1 ] [ 6, 5, 3, 4, 2, 1 ] [ 1, 5, 3, 4, 2, 6 ] [ 1, 5, 3, 4, 2 ] 2 6 3 4 5 1 6 5 3 4 2 1
  • 18. 힙 정렬 [ 1, 5, 3, 4, 2 ] [ 5, 4, 3, 1, 2 ] [ 2, 4, 3, 1, 5 ] [ 2, 4, 3, 1 ] 1 5 3 4 2 5 4 3 1 2
  • 19. 힙 정렬 [ 2, 4, 3, 1 ] [ 4, 2, 3, 1 ] [ 1, 2, 3, 4 ] [ 1, 2, 3 ] 2 4 3 1 4 2 3 1
  • 20. 힙 정렬 [ 1, 2, 3 ] [ 3, 2, 1 ] [ 1, 2, 3 ] [ 1, 2 ] 1 2 3 3 2 1
  • 21. 힙 정렬 [ 1, 2 ] [ 2, 1 ] [ 1, 2 ] [ 1 ] 1 2 2 1
  • 22. 힙 정렬 [ 1 ] 끝 1
  • 23. 힙 정렬 힙 정렬은 퀵 정렬과 가장 먼저 비교 가능한 일반적인 비교 정렬 알고리즘이다. worst-case 에서 O(nlogn)이고, 병합정렬과 다르게 상수 만 큼의 공간을 요구 한다. 따라서, 보안을 신경 쓰는 시스템이 나, 리얼타임 제약 사항이 있는 임베디드 시스템에서는 종종 힙 정렬을 사용 한다.
  • 24.