我试图找出如何(使用快速排序算法)按 2 个标准对结构数组进行排序。例如说我有一个结构:
struct employee{
char gender[12];
char name[12];
int id;
};
说我的输入是:
struct employee arr[3]=
{
{"male","Matt",1234},
{"female","Jessica",2345},
{"male","Josh",1235}
};
我想先按性别对元素进行排序,然后按升序对 ID 进行排序。一个例子是让所有男性首先按顺序打印他们的 ID,然后所有女性都打印他们的 ID。我试图在不使用 qsort 函数的情况下执行此操作,但我一点也不知道如何检查。这是我的排序功能:
void quicksort(struct employee *arr, int left, int right)
{
int pivot, l, r, temp;
if(left < right)
{
p = left;
l = left;
r = right;
while(l < r)
{
while(arr[l].id <= arr[p].id && l <= right)
l++;
while(arr[r].id > arr[p].id && r >= left)
r--;
if(l < r)
{
temp = arr[l].id;
arr[l].id = arr[r].id;
arr[r].id = temp;
}
}
temp = arr[r].id;
arr[r].id = arr[p].id;
arr[p].id = temp;
quicksort(arr, left, r-1);
quicksort(arr, r+1, right);
}
}
有什么建议么?我在想我可以使用 strcmp 但我不知道将它包含在函数中的哪个位置。