#include #include #include #include //time() struct Student { int id; float gpa; char* name; }; void print_std (struct Student std){ printf("Name: %s\n", std.name); printf("ID: %d\n", std.id); printf("GPA: %f\n", std.gpa); return; } void sort_first_two (void** arr, int n, int (*cmp) (void* a, void* b)){ if (cmp(arr[0], arr[1]) == 1){ //swap the two element void* temp = arr[0]; arr[0] = arr[1]; arr[1] = temp; return; } return; } int compare_int(void* a, void* b){ int* ai = a, *bi = b; if (*ai > *bi) return 1; return 0; } int compare_std(void* a, void* b){ struct Student* s1 = a, *s2 = b; if (s1->id > s2->id) return 1; return 0; } int main() { srand(time(NULL)); int size = 10; int** arr = malloc(sizeof(int*) * size); //populate the array for (int i = 0; i < size; ++i) { arr[i] = malloc(sizeof(int)); *(arr[i]) = rand() % 51; //0-50 } //print the array for (int i = 0; i < size; ++i) { printf("%d ", *(arr[i])); } printf("\n"); sort_first_two((void**)arr, size, compare_int); //print the array for (int i = 0; i < size; ++i) { printf("%d ", *(arr[i])); } printf("\n"); struct Student** std_arr = malloc (sizeof(struct Student*) *2); std_arr[0] = malloc (sizeof(struct Student)); std_arr[0]->id = 5678; std_arr[0]->gpa = 3.0; std_arr[0]->name = "name1"; std_arr[1] = malloc (sizeof(struct Student)); std_arr[1]->id = 1234; std_arr[1]->gpa = 4.0; std_arr[1]->name = "name2"; print_std (*(std_arr[0])); print_std (*(std_arr[1])); printf("\n"); sort_first_two((void**)std_arr, 2, compare_std); print_std (*(std_arr[0])); print_std (*(std_arr[1])); printf("\n"); for (int i = 0; i < size; ++i) { free(arr[i]); arr[i] = NULL; } free(arr); arr = NULL; free(std_arr[0]); free(std_arr[1]); free (std_arr); std_arr = NULL; return 0; }