1. 버블 정렬 (Bubble Sort)
- 인접한 두 개의 데이터를 비교해가면서 정렬을 진행
- 앞에서부터 순서대로 비교하고 교환하는 일련의 과정이 거품이 일어나는 모습에 비유되어 버블정렬이라 함
- 이해를 위한 그림 및 성능평가
2. 선택 정렬 (Selection Sort)
- 정렬순서에 맞게 하나씩 선택해서 옮기는, 옮기면서 정렬이 되게 하는 알고리즘
- 정렬순서상 가장 앞서는 것을 선택해서 가장 왼쪽으로 이동시키고, 원래 그 자리에 있던 데이터는 빈 자리에 가져다 놓는다
- 이해를 위한 그림 및 성능평가
3. 삽입 정렬 (Insertion Sort)
- 정렬 대상을 두 부분으로 나눠서, 정렬 안 된 부분에 있는 데이터를 정렬 된 부분의 특정 위치에 삽입해 가면서 정렬을 진행하는 알고리즘
- 데이터를 한 칸씩 뒤로 밀면서 삽입할 위치를 찾는다
4. 힙 정렬 (Heap Sort)
- 힙 정렬의 특성 : 힙의 루트 노드에 저장된 값이 가장 커야 한다
- 이를 활용하면 "힙의 루트 노드에 저장된 값이 정렬 순서상 가장 앞선다" 로 구성할 수 있다
5. 병합 정렬 (Merge Sort)
- 분할 정복 (Divide and Conquer) 이라는 알고리즘 디자인 기법에 근거해 만들어진 정렬 방법
- 총 3단계
- 분할 (Divide) - 해결이 용이한 단계까지 문제를 분할해 나간다
- 정복 (Conquer) - 해결이 용이한 수준까지 분할된 문제를 해결한다
- 결합 (Combine) - 분할해서 해결한 결과를 결합하여 마무리한다
6. 퀵 정렬 (Quick Sort)
- 퀵 정렬 이해에 필요한 정의
- left - 정렬대상의 가장 왼쪽 지점
- right - 정렬대상의 가장 오른쪽 지점
- pivot - 중심점, 중심축의 의미를 담고있음
- low - 피벗을 제외한 가장 왼쪽에 위치한 지점
- high - 피벗을 제외한 가장 오른쪽에 위치한 지점
7. 기수 정렬 (Radix Sort)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
#include <stdio.h>
#include "ListBaseQueue.h"
#define BUCKET_NUM 10
void RadixSort(int arr[],int num, int maxLen)
{
// 매개변수 maxLen에는 정렬대상 중 가장 긴 데이터의 길이 정보가 전달
Queue bukets[BUCKET_NUM];
int bi;
int pos;
int di;
int divfac = 1;
int radix;
// 10 개의 버킷 초기화
for(bi =0; bi<BUCKET_NUM; bi++)
QueueInit(&bukets[bi]);
//가장 긴 데이터의 길이만큼 반복
for(pos=0;pos<maxLen;pos++)
{
//정렬대상의 수만큼 반복
for(di=0;di<num;di++)
{
//N번째 자리의 숫자 추출
radix = (arr[di]/divfac)%10;
// 추출한 숫자를 근거로 법킷에 데이터 저장
Enqueue(&bukets[radix], arr[di]);
}
// 버킷 수만큼 반복
for(bi=0,di=0;bi<BUCKET_NUM;bi++)
{
//버킷에 저장된 것 순서대로 다 꺼내서 다시 arr에 저장
while(!QIsEmpty(&bukets[bi]))
arr[di++] = Dequeue(&bukets[bi]);
}
// N번째 자리의 숫자 추출을 위한 피제수 증가
divfac *= 10;
}
}
int main(void)
{
int arr[7]={13,212,14,7141,10987,6,15};
int len = sizeof(arr)/sizeof(int);
int i;
;
RadixSort(arr, len, 5);
for(i=0;i<len;i++)
printf("%d ",arr[i]);
printf("\n");
return 0;
}
|
cs |
728x90
'Data Structures & Algorithms' 카테고리의 다른 글
[Data Structures] 테이블(Table)과 해쉬(Hash) (0) | 2022.05.09 |
---|---|
[Data Structures] 탐색 (Search) (0) | 2022.05.09 |
[Data Structures] 우선순위 큐 (Priority Queue)와 힙 (Heap) (0) | 2022.05.07 |
[Data Structures] 트리 (Tree) (0) | 2022.05.07 |
[Data Structures] 큐 (Queue)와 덱 (Deque) (0) | 2022.05.06 |