1. 내부 정렬 (internal sort)
데이터를 키의 값에 따라 오름차순 또는 내림차순으로 일정하게 배열하는 것
데이터의 개수가 비교적 적어 컴퓨터의 주기억장치만으로 실행되는 경우
삽입 정렬(insert sort)
레코드 Ri의 정렬 키를 Ki라 하고 새로 삽입될 레코드 R의 키를 K라 할 때 이미 정렬되어 있는 일련의 i개 레코드 R1, R2 …, R(K1 < K2 < … < Ki )에 레코드 R이 삽입되어 크기가 i+1개 이고 역시 순서대로 정렬된다. 만약 정렬되고자 하는 파일의 레코드 수가 n개라면 한 개의 레코드 씩 차례로 삽입하여 n-1개를 삽입했을 때 완료되는 정렬 방식
장점 : 간단하고 안정적이다.
단점 : 정렬 횟수가 많다(n-1회의 정렬 횟수). 정렬 속도가 늦다.
삽입 정렬(insert sort)
정수형 데이터에 대한 삽입 정렬 알고리즘
Void insertion( int R[], int n )
{
int I, j, v;
for(i=1; i<n; i++) {
v = R[i];
j = i;
while ( R[i-j] > v )
R[j] = R[i–j]; j = j-1
if ( i <= 0 ) break;
}
R[j] = v;
}
}
레코드 수 n= 5 이고 초기 입력 데이터가 8, 3, 4, 9, 7일 때
삽입 정렬 방식으로 순서 배열 과정을 나타내시오.
초기상태 : 8 3 4 9 7
1 단 계 : 8 3 4 9 7
2 단 계 : 8 3 4 9 7
3 단 계 : 8 3 4 9 7
4 단 계 : 8 3 4 9 7
쉘 정렬 (Shell sort)
삽입 정렬의 개념을 확대하여 일반화시킨 정렬 방법
초기 입력 파일을 어떤 매개 변수의 값으로 여러 개의 서브 파일을 구성하여 가면서, 각 서브 파일을 삽입 정렬 방식으로 순서 배열하는 과정을 반복하는 정렬 방식
셀 정렬 알고리즘
선택 정렬(selection sort)
n개의 레코드 중에서 첫 번째 값을 키로 하여 남은 데이터 중에서 최소값을 선택하여 비교한 후, 선택된 값이 키 값보다 작으면 서로 교환하고, 그렇지 않으면 다음 값을 키로 하여 n-1만큼 반복 수행하는 정렬
선택 정렬 알고리즘
① n = 레코드의 수
② 처음 값을 키로 지정한다.
③ 처음부터 끝까지 키 값과 비교하여 키보다 작으면 서로 교환한다.
④ 키 = 키 + 1
⑤ n번 비교 되었으면 종료, 그렇지 않으면 ③을 수행한다.
선택 정렬 수행 예제
n = 5 이고 초기 상태의 데이터가 8 3 4 9 7 일 때 선택 정렬을 수행하라.
초기상태 : 8 3 4 9 7
1 단 계 : (3)(8 4 9 7)
2 단 계 : (3 4)(8 9 7)
3 단 계 : (3 4 7)( 8 9)
4 단 계 : (3 4 7 8 9)
버블 정렬(bubble sort)
주어진 초기 입력 파일에서 인접한 레코드 쌍의 두 키를 비교하여, 그 키의 크기에 따라 레코드의 위치를 서로 교환하는 작업을 배열의 마지막까지 반복 수행하는 정렬 방법
플래그(flag)가 없는 버블 정렬
정의 : 버블 정렬의 일반적인 형태로 레코드 간의 키 값을 비교해서 위치를 서로 교환하면서 정렬하는 것이다.
플래그가 없는 버블 정렬 알고리즘
① 인접한 두 개의 키를 비교한다.
② 앞의 키가 뒤의 키 값보다 크면 서로 교환하고, 아니면 그대로 수행한다.
③ 한 레코드의 끝까지 비교 정렬한다.
④ (n - 1)번 반복 수행한다.
플래그(flag)가 없는 버블 정렬
플래그가 없는 버블 정렬 예제
n = 5 이고 초기 상태의 데이터가 8 3 4 9 7 일 때 버블 정렬을 수행하라.
초기상태 : 8 3 4 9 7
플래그가 있는 버블 정렬
정의
버블 정렬로 정렬하는데 플래그를 사용함으로써 비교 횟수를 상당히 줄일 수 있으므로 인하여 정렬로 빠르게 할 수 있다.
플래그가 있는 버블 정렬 알고리즘
① 플래그를 세트(set)시킨다.
② 인접한 두 개의 키를 비교한다.
③ 앞의 키가 뒤의 키 값보다 크면 서로 교환하고 플래그를 리셋(reset) 시킨다.
④ 플래그가 원래의 값이면 종료, 아니면 ①로 간다.
n = 5 이고 초기 상태의 데이터가 8 3 4 9 7 일 때 버블 정렬을 수행하라.
초기상태 : 8 3 4 9 7 (flag = 1)
1 단 계 : 3 4 8 7 9 (flag = 0)으로 변화
(flag = 1로 set)
2 단 계 : 3 4 7 8 9 (flag = 0)으로 변화
(flag = 1로 set)
3 단 계 : 3 4 7 8 9 (flag = 1이 그대로 이므로, 수행중지)
퀵 정렬(quick sort)
정의
C. A. Hore가 고안한 정렬로 주어진 파일에서 어떤 특정한 값(제어 키)을 주어 왼쪽에는 제어 키 값보다 작은 레코드를 배열하고, 오른쪽에는 제어 키보다 큰 값을 놓이게 하여, 논리적으로 2개의 서브 파일로 재배열하고 각각의 서브 파일에서 위의 과정을 반복하는 정렬 방법
퀵 정렬 알고리즘
① 주어진 파일의 중간 위치를 기준으로, 그 값보다 큰 값들은 우측, 작은 값은 좌측에 교환하여 서브 파일을 구성한다
② 각 서브 파일에서 좌측의 서브 파일부터 다시 ①과 같은 요령으로 서브 파일을 구성한다
③ 위의 ①과 ②의 과정을 오른쪽 서브 파일에 이르기까지 반복한다.
퀵 정렬 실행 예제
n = 9 이고 초기 상태의 데이터가 15, 25, 45, 65, 22, 33, 9, 7, 55 일 때 퀵 정렬을 수행하라.
2-원 병합 정렬 (2-way merge sort)
정의
정렬된 2개의 파일을 혼합하여 완전히 정렬된 하나의 파일로 합하는 정렬 방식
2-way 병합 정렬 알고리즘
2-way 병합 정렬 수행 예제
초기 상태 : 6 9 2 12 8 34 23 33 56 17 56 32
2-way 병합 정렬 실행 시간
기억 장소 사용 공간 : S = 2n
단계(pass) 수 : log2n
실행 시간 : O(nlog2n)
기수 정렬 (radix sort, burket sort, digital sort)
정의
스택을 이용하여 자리수의 숫자에 따라 다중키(multi key)에 대한 정렬로서, 키 값을 비교하는 것이 아니라, 키를 구성하는 자리수를 분석하여 같은 것끼리 같은 장소에 분배하여 정렬
기수 정렬 알고리즘
① LSB(Least Significant Bit)를 검토하여 적절한 큐에 저장한다.
② 0에서 9번 큐의 내용을 순서대로 배열하여 리스트로 재구성 한다.
③ 계속하여 다음 디지트를 대상으로 ①, ② 과정을 반복하여, 모든 자리수가 완료될 때까지 실행한다.
힙 정렬 (heap sort)
정의
주어진 파일의 레코드를 힙(heap)이라는 자료 구조를 이용하여 정렬하는 방법
힙(heap) 구조는 완전 이진 트리(complete binary tree)로서 각 노드의 키 값이 자식 노드들의 키 값보다 작지 않은 트리로서, 힙 루트(heap root)는 트리 중 가장 큰 값을 나타낸다.
장점 : 삽입, 삭제가 용이하다.
단점 : 이동할 때 힘 구조가 재구성되어야 한다.
힙 구조 알고리즘
① 주어진 데이터를 이진 트리로 구성한다.
② 제일 늦게 구성된 트리를 선택한다.
③ 부모 노드와 자식 노드 중 가장 큰 값을 선택한다.
④ 부모 노드와 자식 노드 중 가장 큰 값을 비교한다.
if 부모 노드 > 자식 노드 중 큰 값 then 그대로 둔다.
if 부모 노드 < 자식 노드 중 큰 값 then 서로 위치를 교환한다.
⑤ ②, ③, ④의 과정을 반복 수행한다.
힙 정렬 실행 알고리즘
① 근 노드의 값을 배열의 맨 마지막에 위치시킨다.
② 빈 근 노드의 자리에는 자식 노드 중 가장 큰 값을 위치시킨다.
③ 빈 자식 노드의 자리에는 서브 트리의 자식 노드 중 가장 큰 값을 위치시킨다.
④ 맨 마지막 노드부터 차례로 없어진다.
⑤ ①∼④의 과정을 반복 수행한다.
'자료구조 > 수업' 카테고리의 다른 글
23. 정렬(12-1) (0) | 2017.07.05 |
---|---|
22. 그래프의 운행과 응용(11-2) (0) | 2017.07.04 |
21. 그래프의 표현(11-1) (0) | 2017.07.04 |
20. 그래프(10-2) (0) | 2017.06.26 |
19. 트리의 산술식의 내부 표현과 이진트리의 삽입과 삭제(10-1) (0) | 2017.06.26 |