반응형
strlen() 문자열의 길이 반환
int strlen(const char*s, int len = 0){
while (s[len]) len++;
return len;
}
strcmp() 문자열 대소 비교
int strcmp(const char*s, const char*t){
while (*s && *s == *t) s++, t++;
return *s - *t;
}
strcpy() 문자열 복사
void strcpy(char*dest, const char*src){
while (*dest++ = *src++);
}
문자열 Hash
unsigned long djb2(const char* str)
{
unsigned long hash = 5381;
int c;
while (c = *str++)
{
hash = (((hash << 5) + hash) + c) % TABLE_SIZE;
}
return hash % TABLE_SIZE;
}
대소문자 확인
int isupper(char c){return c >= 'A' && c <= 'Z';}
int islower(char c){return c >= 'a' && c <= 'z';}
Merge Sort
const int STRLEN = 10;
const int N = 10;
int strcmp(const char* s, const char* t) {
while (*s && *s == *t) s++, t++;
return *s - *t;
}
struct member {
char name[STRLEN];
bool operator <(const member& target) const {
// 사전순 정렬
if (strcmp(name, target.name) > 0)
return true;
return false;
}
} temp[N], arr[N];
void mergeSort(member* arr, int start, int end) {
if (start >= end) return;
// 1. divide
int mid = (start + end) / 2;
// 2. conquer
mergeSort(arr, start, mid);
mergeSort(arr, mid + 1, end);
// 3. merge
int i = start, j = mid + 1, k = start;
while (i <= mid && j <= end) {
if (arr[i] < arr[j])
temp[k++] = arr[i++];
else
temp[k++] = arr[j++];
}
while (i <= mid) temp[k++] = arr[i++];
while (j <= end) temp[k++] = arr[j++];
// 4. copy
for (i = start; i <= end; ++i) {
arr[i] = temp[i];
}
}
반응형
'알고리즘' 카테고리의 다른 글
행렬 90° 회전 (C 언어) (0) | 2021.02.28 |
---|---|
정방행렬 90° 회전 (python) (0) | 2021.02.28 |
BFS (Breadth-First Search, 너비 우선 탐색) (0) | 2021.02.27 |
깊이 우선 탐색(depth-first search, DFS) (0) | 2021.02.27 |
최소신장 트리 - 프림(Prim) / 크루스칼(Kruskal) (0) | 2021.02.27 |
댓글