각종 실기시험 자료실/- 정보처리기사

각종 정렬 알고리즘 모음

new올빼미 2009. 1. 27. 16:36
728x90

힙정렬(Heap Sort)이란?

-. 힙은 전이진 트리에서 임의의 노드는 언제나 자식노드들 보다 큰 값을 갖는 구조이다.

-. 여러 개의 노드들 중에서 가장 큰 키값을 가지는 노드나 가장 작은 키값을 가지는 노드를

   빨리 찾아내도록 만들어진 자료구조이다.

-. 완전 이진 트리의 하나로서 각각의 노드는 유일한 키값을 가진다.

-. 트리구조에서는 Root가 가장 큰 값을 보유하고 있다.

-. 우선순위 큐의 일종으로 우선순위가 높은 요소를 효율적으로 선택할 수 있는 자료구조이다.

 

2. 우선순위 큐(Priority Queue)?

-. 큐에 저장된 자료는 순위에 의해 순서가 유지되는 자료구조의 추상적인 개념이며 다음

   일곱가지의 동작이 정의되는 경우가 대부분이다.

   1) 생성(Construct) – 주어진 N개의 자료로 우선순위 큐를 생성한다.

   2) 삽입(Insert) ---- 우선순위 큐에 새로운 자료를 삽입한다.

   3) 제거(Remove) ---- 순위가 가장 높은 자료를 제거한다.

   4) 대치(Replace) --- 순위가 가장 높은 자료와 새로운 자료를 대치한다.

   5) 변경(Change) ---- 자료의 순위를 변경한다.

   6) 삭제(Delete) ---- 임의의 자료를 삭제한다.

   7) 결합(Join) ------ 두 우선순위 큐를 결합하여 큰 우선순위 큐를 만든다.

 

3. 정렬을 이용하여 오름차순으로 정렬하는 방법

 

 

4. 힙정렬의 비교회수

-. 비교회수 공식 : 2N log N

 

5. 힙정렬의 연산시간

  -. 연산시간 공식(평균) : 0(n log n)

-. 연산시간을 표기하는 방법은 일반적으로 사용하는 O표기법인데 O표기법은 최악의 경우

   (Worst Case)에 대한 연산시간을 나타낸다.

 

6. 힙정렬의 장점

-. 다른 정렬들에 비해 최악의 연산시간일 경우에도 0(n log n)으로 적게 든다.

-. 추가적인 메모리를 필요로 하지 않는다.

 

7. 힙정렬의 단점

-. 데이터 구조에 따라서 다른 정렬보다 조금 늦게 정렬될 수도 있

 

 퀵 정렬 | 알고리즘

 

 

 

1. 퀵정렬(Quick Sort)이란?

-. 교환정렬의 일종이며 분할-정복법(divide and conquer)에 근거한다.

-. 정렬할 리스트를 두개로 분할하고 정렬하는 방법이다.

-. (pivot)값을 기준으로 정렬하는데축값을 중심으로 축값보다 큰 값은 오른쪽 리스트에

   작은 값은 왼쪽리스트로 이동시킨다. (첫번째의 데이터를 축값으로 한다.)

-. 오른쪽 리스트와 왼쪽 리스트부분은 독립적인 단위로 정렬하여 오른쪽 리스트부분에 대한

   새로운 분할 축값을 선택하여 두 부분으로 분리하고, 왼쪽 리스트부분 역시 새로운 축값을

   선택하여 두 부분으로 분리하는 과정을 반복하는데 리스트들은 재귀적 방법으로 각각 재배열

   하는 방식이다.

-. 각 분할 자료개수가 1이 되면 정렬은 완료된다.

 

2. 정렬을 이용하여 오름차순으로 정렬하는 방법

 

 

 

 

 

3. 퀵정렬의 비교회수

-. 최선일 경우의 비교회수 공식 : N - 1

-. 최악일 경우의 비교회수 공식 : N(N – 1)/2

-. 위의 그림을 보시면 아시겠지만 제일 처음에는 (N – 1)번을 비교하고,

   그 다음에는 (N – 2)번 만큼 비교하고그 다음은 (N – 3)번을 비교하면서 비교회수가 1이 될

   때까지 이 작업을 반복할 것이다.

-. 비교회수는 (N – 1) + (N – 2) + (N – 3) …… + 1 이 될 것이다.

   최대 (N – 1)번을 수행할 것이며각 패스가 수행할 때마다

   수학식으로 표현하면   이므로 공식은 N(N – 1)/2 이런 공식이 성립된다.

 

4. 퀵정렬의 연산시간

  -. 연산시간 공식(평균) : 0(n log n)

  -. 연산시간 공식(최악이 경우) : O(n²)

-. 연산시간을 표기하는 방법은 일반적으로 사용하는 O표기법인데 O표기법은 최악의 경우

   (Worst Case)에 대한 연산시간을 나타낸다.

  

5. 퀵정렬의 장점

-. 정렬할 데이터가 이미 준비되어 있고 모든 데이터들을 정렬해야 할 경우에 가장 빠른

   수행속도를 보여준다.

 

6. 퀵정렬의 단점

-. (pivot)값이 같은 것끼리는 순서관계가 파괴된다.

   (중요한 데이터의 경우에는 퀵정렬을 사용하지 않는 것이 좋다.)

-. 안정성이 없다.

 

쉘 정렬 | 알고리즘

 

쉘정렬(Shell Sort)이란?

-. 자료를 여러 부분으로 분할하여 적절한 크기로 나누어진 배열들을 간단한 삽입정렬 등을 이용

   하여 정렬한 후 합쳐가면서 다시 정렬하는 방식이다.

   결국, 전체를 정렬하는 방식이며 자료들을 분할하는데 있었어 너무 잘게 분할하거나 너무

   엉성하게 분할하면 부분 정렬 후 병합의 어려움이 생길 수 있다.

   (적당한 매개변수(h)를 정하고 h만큼 떨어져 있는 값을 비교하여 h 1이 될 때까지 반복)

-. 멀리 떨어진 자료와 비교할 때 멀리 떨어져 있는 값들만 비교하고 떨어진 정도를 점차 줄여나

   가다가 마지막에 1이 되면 정렬이 완료된다.

 

2. 쉘정렬에서 자료를 분할하는 평균적인(자주 사용하는공식

-. 자료를 몇 개로 분할해야 되는지의 기준(increments 또는 h-sequence라고 부른다)이 전체적인

   성능에 결정적인 영향을 미친다.

   (일반적으로 떨어진 정도를 구하는 것은 여러 가지 방법이 있으며 경우에 맞게 정하면 된다.)

-. 평균적인 공식

     h(1) = 1;

     h(i + 1) = 3 * h(i) + 1;

   로 하면 좋은 결과를 얻을 수 있으며이 순열은 1, 4, 13, 40 …의 역순으로 된 순열이다.

   만약배열의 크기가 60일 때는 먼저 40개의 부분배열로 나누어 삽입정렬을 이용하고,

   13개의 부분배열로 나누어서 삽입정렬을 이용한다.

   배열을 다시 4개의 부분배열로 나누어 삽입정렬을 한 후 마지막으로 배열전체에 삽입정렬을

   한다.

 

3. 정렬을 이용하여 오름차순으로 정렬하는 방법

4. 쉘정렬의 비교회수

-. 순열 h가 1, 4, 13, 40 … 일 때의 비교회수

 

5. 쉘정렬의 연산시간

  -. 연산시간 공식 : O(n²)

-. 연산시간을 표기하는 방법은 일반적으로 사용하는 O표기법인데 O표기법은 최악의 경우

   (Worst Case)에 대한 연산시간을 나타낸다.

-. 수학식으로 표현하면 아래와 같다.

     = n(n – 1) – (n – 1)/2 = n(n - 1)/2 이므로 Worst Case는 n(n – 1)/2 이다.

   그래서 연산시간은 O(n²)가 되는 것이다.

  

6. 쉘정렬의 장점

-. 입력자료에 상관없이 뛰어난 속도를 보인다.

-. 삽입정렬은 왼쪽에 있는 자료가 정렬이 되었다는 가정하에 정렬을 하므로, 가장 오른쪽에 있는

   자료를 왼쪽으로 삽입하려고 하면 많은 교환이 이루어지는 단점을 보완한 정렬방식이다.

-. 멀리 떨어져있는 자료들이 비교 및 교환될 수 있으므로 어떤 자료가 제 위치에서 멀리 떨어져

   있다면 여러 번의 교환이 발생하는 버블정렬 방식의 단점을 해결한다.

 

7. 쉘정렬의 단점

-. 기준(h)을 정하는 방법에 따라 알고리즘의 성능이 달라진다.

-. 안정성이 없다.