13장 정렬
- 선택 정렬 : O(n^2)
#define SWAP(x,y,t) ((t) = (x), (x) = (y), (y) = (t))
void selection_sort (int list[], int n)
{
int i, j, least, tmp;
for(i=0; i<n-1; i++) {
least = i;
for(j = i+1; j < n; j++)
if(list[j] < list[least]
least = j;
SWAP(list[i], list[least], tmp);
}
}
- 삽입 정렬 O(n^2)
- 버블 정렬 : O(n^2)
void bubble_sort (int list[], int n)
{
int i, j, bChanged, tmp;
for(i = n-1; i>0; i--){
bChanged = 0;
for(j=0; j<i ; j++)
if(list[j] > list[j+1]) {
SWAP(list[j], list[j+1], tmp);
bChanged = 1;
}
if(!bChanged) break;
}
}
- shell 정렬
- 병합정렬 O(n*log(n)) merge sorting
static void merge(int list[], int left, int mid, int right) {
int i, j, k = left, l;
static int sorted[MAX_SIZE];
for(i=left, j= mid+1; i <= mid && j<= right)
sorted[k++] = (list[i] <= list[j]) ? list[i++] : list[j++];
if(i > mid)
for(l=j; l <= right ; l++, k++)
sorted[k] = list[l];
else
for(l=j ; l <= right ; l++, k++)
sorted[k] = list[l];
for(l= left; l<=right ; l++)
list[l] = sorted[l];
}
void merge_sort(int list[], int left, int right){
if(left < right) {
int mid = (left+right)/2;
merge_sort(list, left, mid);
merge_sort(list, mid+1, right);
merge_sort(list, left, mid, right);
}
}
- 퀵 정렬
- 기수 정렬 (radix sorting)
void radixSort(int list[], int n)
{
Queue queue[BUCKETS];
int factor =1, i, b, d;
for(i=0 ; i<BUCKETS ; i++)
init_queue(&queue[i]);
for(d=0 ; d<DIGITS ; d++){
for(i=0; i<n; i++)
enqueue(&queues[(list[i]/factor)%10], list[i]);
for(b=i=0 ; b<BUCKETS ; b++)
while(!is_empty(&queues[b]));
list[i++] = dequeue(&queues[b]);
factor *= 10;
}
}
14장 탐색
- 순차 탐색 (sequential search)
- 색인 순차탐색(Indexed sequential search)
- 이진 탐색 (binary search) : 정렬된 배열의 탐색에 적합
- 보간탐색 (interpolation search) : O(logn)
- 해싱 (hashing)
'학교 수업 > 두근두근 자료구조' 카테고리의 다른 글
[두근두근 자료구조] 힙의 구현과 연산(10장 우선순위 큐) (1) | 2023.12.08 |
---|---|
[두근두근 자료구조] 11,12장 (1) | 2023.12.08 |
[두근두근 자료구조] 08,09,10장 (0) | 2023.10.27 |
[두근두근 자료구조] 05,06,07장 (0) | 2023.10.27 |
[두근두근 자료구조] 01,02,03,04장 (0) | 2023.10.26 |