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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
| typedef int (*CompareFunc)(int a, int b); typedef void (*ProcessFunc)(int *arr, int size);
int ascending(int a, int b) { return a - b; }
int descending(int a, int b) { return b - a; }
void double_values(int *arr, int size) { for (int i = 0; i < size; i++) { arr[i] *= 2; } }
void square_values(int *arr, int size) { for (int i = 0; i < size; i++) { arr[i] *= arr[i]; } }
void bubble_sort(int *arr, int size, CompareFunc compare) { for (int i = 0; i < size - 1; i++) { for (int j = 0; j < size - i - 1; j++) { if (compare(arr[j], arr[j + 1]) > 0) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } }
void process_array(int *arr, int size, ProcessFunc processor) { if (processor) { processor(arr, size); } }
int main() { int numbers[] = {5, 2, 8, 1, 9, 3}; int size = sizeof(numbers) / sizeof(numbers[0]); printf("原始数组: "); for (int i = 0; i < size; i++) { printf("%d ", numbers[i]); } printf("\n"); bubble_sort(numbers, size, ascending); printf("升序排序: "); for (int i = 0; i < size; i++) { printf("%d ", numbers[i]); } printf("\n"); bubble_sort(numbers, size, descending); printf("降序排序: "); for (int i = 0; i < size; i++) { printf("%d ", numbers[i]); } printf("\n"); process_array(numbers, size, double_values); printf("翻倍后: "); for (int i = 0; i < size; i++) { printf("%d ", numbers[i]); } printf("\n"); return 0; }
|