#include //standard input/output library #include //malloc() #include struct Student { char* name; int id; float gpa; }; void print_student (struct Student std){ printf("----------------------\n"); printf("Name: %s\n", std.name); printf("ID: %d\n", std.id); printf("GPA: %f\n", std.gpa); printf("----------------------\n"); } void sort_first_two(void** arr, int n, int (*cmp) (void* a, void* b)){ if (n < 2) return; if (cmp(arr[0], arr[1]) == 0){ //swap the two void* temp = arr[0]; arr[0] = arr[1]; arr[1] = temp; } return; } int compare_ints(void* a, void* b){ int* ai = a, *bi = b; if (*ai < *bi) return 1; return 0; } int compare_stds(void* a, void* b){ struct Student* ai = a, *bi = b; if (ai->id < bi->id) return 1; return 0; } int main() { int size = 10; int** array = malloc(sizeof(int*) * size); for (int i = 0; i < size; ++i) { array[i] = malloc(sizeof(int)); *(array[i]) = 100 - i; } printf("Before sorting...\n"); for (int i = 0; i < size; ++i) { printf("%d ", *(array[i])); } printf("\n"); sort_first_two((void**)array, size, compare_ints); printf("After sorting...\n"); for (int i = 0; i < size; ++i) { printf("%d ", *(array[i])); } printf("\n"); struct Student** std_arr = malloc(sizeof(struct Student*) * 2); std_arr[0] = malloc(sizeof(struct Student)); std_arr[0]->name = "Roger"; std_arr[0]->id = 9999; std_arr[0]->gpa = 3.5; std_arr[1] = (struct Student*) malloc(sizeof(struct Student)); std_arr[1]->name = "asdfjasdkl"; std_arr[1]->id = 8888; std_arr[1]->gpa = 3.0; printf("Before sorting...\n"); for (int i = 0; i < 2; ++i) { print_student(*(std_arr[i])); } printf("\n"); sort_first_two((void**)std_arr, 2, compare_stds); printf("After sorting...\n"); for (int i = 0; i < 2; ++i) { print_student(*(std_arr[i])); } printf("\n"); for (int i = 0; i < 2; ++i) { free(std_arr[i]); std_arr[i] = NULL; } free(std_arr); std_arr = NULL; for (int i = 0; i < size; ++i) { free(array[i]); array[i] = NULL; } free(array); array = NULL; return 0; }