構造体配列を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 を使用できると思っていましたが、関数内のどこに含めるかわかりません。