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