728x90
DataStructure] C언어로 쉽게 풀어쓴 자료구조 9장 - 2
C언어로 쉽게 풀어쓴 자료구조
9장 Exercise 문제다.
필자가 학교 다니면서 자료구조론 수업을 들었는데,
과제로 제출했던 것들이고,
난항을 겪고 있는 사람들에게 참고가 되었으면 하는 마음으로 올린다.
자고로, 버그가 존재할 수 있으니 디버깅 작업은 필수다.
20 C언어에서는 다음과 같이 함수 포인터를 파라미터로 갖는 함수를 만드는 것도 가능하다.
먼저 간단한 두 개의 함수를 작성한다. ascend(int x, int y)는 x<y면 TRUE를, 아니면 FALSE를 반환한다. descend(int x, int y)는 x>y면 TRUE를, 아니면 FALSE를 반환한다. insertion_sort 함수에 ascend 함수를 파라미터로 전달하면 오름차순 정렬이 되도록 하고, descend 함수를 파라미터로 전달하면 내림차순 정렬이 되도록 하라.
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 60 61 62 63 64 | #include <stdio.h> #include <stdlib.h> #define TRUE 1 #define FALSE 0 typedef int element; int ascend(element x, element y) { if (x < y) return FALSE; return TRUE; } int descend(element x, element y) { if (x > y) return FALSE; return TRUE; } void InsertionSort(element list[], int n, int (*func)(int, int)) { element key; int i, j; for (i = 1; i < n; i++) { key = list[i]; for (j = i - 1; j >= 0 && func(list[j],key); j--) list[j + 1] = list[j]; list[j + 1] = key; } } void PrintArray(element list[], int n) { for (int i = 0; i < n; i++) printf("%d ", list[i]); printf("\n"); } int main(void) { int n; element* ar; printf("배열의 크기는 : "); scanf_s("%d", &n); printf("배열 내용 입력 : "); ar = (element*)malloc(sizeof(element)*n); for (int i = 0; i < n; i++) scanf_s("%d", &ar[i]); printf("정렬 전 배열 내용 : "); PrintArray(ar, n); InsertionSort(ar, n, ascend); printf("\n오름차순 후 배열 내용 : "); PrintArray(ar, n); InsertionSort(ar, n, descend); printf("\n내림차순 후 배열 내용 : "); PrintArray(ar, n); free(ar); } | cs |
728x90
'Computer Science > Data Structure, Algorithm' 카테고리의 다른 글
DataStructure] C언어로 쉽게 풀어쓴 자료구조 9장 - 4 (0) | 2017.05.20 |
---|---|
DataStructure] C언어로 쉽게 풀어쓴 자료구조 9장 - 3 (0) | 2017.05.20 |
DataStructure] C언어로 쉽게 풀어쓴 자료구조 9장 - 1 (0) | 2017.05.18 |
DataStructure] C언어로 쉽게 풀어쓴 자료구조 8장 - 5 (0) | 2017.05.10 |
Algorithm] Knapsack(배낭 문제) - 동적계획법 (0) | 2017.05.07 |