我的快速排序只排序标记而不是标记和学生 ID

My quicksort is sorting just marks instead of marks and student ids

当我在主函数中打印 stu[] 结构数组时,它只对标记进行排序,但 ID 保持不变。因此,例如 stuid abc 有标记 23,def 有标记 12,它交换标记,所以 abc 有 12,def 有 23。我如何做到这一点,以便标记与 id 交换。

struct student
{
    char id[20];
    int mark;
};

typedef struct student Student;
Student stu[5];

void swap(int* a, int* b)
{
    int t = *a;
    *a = *b;
    *b = t;
}

int partition (Student stu[], int low, int high) 
{
    int pivot = stu[high].mark; 
    int i = (low - 1);

    for (int j = low; j <= high- 1; j++)
    {
        if (stu[j].mark < pivot)  
        {
            i++; 
            swap(&stu[i].mark, &stu[j].mark);
        }
    }
    swap(&stu[i + 1].mark, &stu[high].mark);
    return (i + 1);
}


void quickSort(Student stu[], int low, int high)
{
    if (low < high)
    {
        int pi = partition(student, low, high); 
        quickSort(student, low, pi - 1);
        quickSort(student, pi + 1, high);
    }
}

原代码只是交换关键字段,但需要交换整个记录。

更改 swap 函数以交换 Students 而不是 ints:

void swap(Student* a, Student* b)
{
    Student t = *a;
    *a = *b;
    *b = t;
}

更改对 swap 的调用以传递指向 Student 的指针而不是指向 Student.mark 值的指针:

    swap(&stu[a], &stu[b]);