2023.03 ~ 2023.06
************* 실습 **************
실습1 #include <stdio.h> #include <stdlib.h> #include <time.h> #define _CRT_SECURE_NO_WARNINGS void quicksort(int arr[], int p, int r); int partition(int arr[], int p, int r); void print(int arr[], int n); int main(void) { int n; scanf_s("%d", &n); srand((unsigned int)time(NULL)); //랜덤변수 초기화 int* randnum; //포인터 변수 선언 randnum = (int*)malloc(sizeof(int) * n); //랜덤수 넣을 배열 크기 동적할당 for (int i = 0; i < n; i++) { randnum[i] = (int)rand() / (double)RAND_MAX * 1000; //발생시킨 랜덤값을 randomnum 배열에 넣음 } print(randnum, n); //정렬전 데이터 출력 printf("\n"); quicksort(randnum, 0, n - 1); //퀵정렬 함수 호출 print(randnum, n); //정렬후 데이터 출력 free(randnum); //동적할당된 배열 해제 } void quicksort(int arr[], int p, int r) { if (p < r) { int q = partition(arr, p, r); quicksort(arr, p, q - 1); quicksort(arr, q + 1, r); } } int partition(int arr[], int p, int r) { int x = arr[r]; int i = p - 1; int tmp; for (int j = p; j <= r - 1; j++) { if (arr[j] <= x) { tmp = arr[++i]; arr[i] = arr[j]; arr[j] = tmp; } } tmp = arr[i + 1]; arr[i + 1] = arr[r]; arr[r] = tmp; return i + 1; } void print(int arr[], int n) { for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } } |
실습 2 #include <stdio.h> #include <stdlib.h> #include <time.h> #define _CRT_SECURE_NO_WARNINGS void quicksort(int arr[], int p, int r); int partition(int arr[], int p, int r); void print(int arr[], int n); int main(void) { int n; scanf_s("%d", &n); srand((unsigned int)time(NULL)); //랜덤변수 초기화 int* randnum; //포인터 변수 선언 randnum = (int*)malloc(sizeof(int) * n); //랜덤수 넣을 배열 크기 동적할당 for (int i = 0; i < n; i++) { randnum[i] = (int)rand() / (double)RAND_MAX * 1000; //발생시킨 랜덤값을 randomnum 배열에 넣음 } print(randnum, n); //정렬전 데이터 출력 printf("\n"); quicksort(randnum, 0, n - 1); //퀵정렬 함수 호출 print(randnum, n); //정렬후 데이터 출력 free(randnum); //동적할당된 배열 해제 } void quicksort(int arr[], int p, int r) { if (p < r) { int q = partition(arr, p, r); quicksort(arr, p, q - 1); quicksort(arr, q + 1, r); } } int partition(int arr[], int p, int r) { int x = arr[r]; int i = p - 1; int tmp; for (int j = p; j <= r - 1; j++) { if (arr[j] <= x) { tmp = arr[++i]; arr[i] = arr[j]; arr[j] = tmp; } } tmp = arr[i + 1]; arr[i + 1] = arr[r]; arr[r] = tmp; return i + 1; } void print(int arr[], int n) { for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } } |
실습3 #include <stdio.h> #include <stdlib.h> #include <time.h> #define _CRT_SECURE_NO_WARNINGS void countingSort(int* arr, int k, int n); void print(int arr[], int n); int main(void) { int n; int k; printf("n: "); scanf_s("%d", &n); printf("k: "); scanf_s("%d", &k); srand((unsigned int)time(NULL)); //랜덤변수 초기화 int* randnum; //포인터 변수 선언 randnum = (int*)malloc(sizeof(int) * n); //랜덤수 넣을 배열 크기 동적할당 for (int i = 0; i < n; i++) { randnum[i] = (rand() % k) + 1; } print(randnum, n); //정렬전 데이터 출력 printf("\n"); countingSort(randnum, k, n); //병합정렬 함수 호출 print(randnum, n); //정렬후 데이터 출력 free(randnum); //동적할당된 배열 해제 } void countingSort(int* arr, int k, int n) { int i; int* result; int* grade; result = (int*)malloc(sizeof(int) * n); grade = (int*)malloc(sizeof(int) * k); for (i = 0; i < k; i++) grade[i] = 0; for (i = 0; i < n; i++) grade[arr[i]] = grade[arr[i]] + 1; for (i = 1; i < k; i++) grade[i] = grade[i] + grade[i - 1]; for (i = n - 1; i >= 0; i--) { result[grade[arr[i]] - 1] = arr[i]; grade[arr[i]]--; } for (i = 0; i < n; i++) arr[i] = result[i]; } void print(int arr[], int n) { for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } } |
************* 과제 **************
04. 고급정렬.pdf
0.73MB
과제1(병합정렬).c
0.00MB
과제2(힙정렬).c
0.00MB
'정보통신공학 학부 공부 기록 > 알고리즘 (Algorithms)' 카테고리의 다른 글
[ Algorithms ] 09. DP(동적 프로그래밍) (0) | 2024.01.16 |
---|---|
[ Algorithms ] 05. 선택 알고리즘 (BST; 이진탐색트리) (0) | 2023.08.14 |
[ Algorithms ] 03. 기본 정렬 알고리즘 (선택/버블/삽입) (0) | 2023.08.14 |
[ Algorithms ] 02. 분할 정복 / 탐욕 알고리즘 (0) | 2023.08.14 |
[ Algorithms ] 01. 알고리즘 설계와 분석의 기초 (0) | 2023.08.14 |