Sortieren eines array mit mehreren Kriterien Sortieren (QuickSort)

Ich versuche herauszufinden, wie (mit einem quicksort-Algorithmus) Sortieren ein struct array nach 2 Kriterien. Zum Beispiel sagen, ich hatte eine struct von:

struct employee{
   char gender[12];
   char name[12];
   int id;
};

Sagen, dass meine Eingabe ist:

struct employee arr[3]=
{
    {"male","Matt",1234},
    {"female","Jessica",2345},
    {"male","Josh",1235}
};

Ich bin zu wollen, Sortieren Sie die Elemente nach Geschlecht zuerst, dann die IDs in aufsteigender Reihenfolge. Ein Beispiel wäre, haben alle Männer zuerst gedruckt mit deren IDs in der Reihenfolge und dann alle Weibchen mit den ihrigen. Ich bin versucht dies zu tun, ohne mit der qsort-Funktion, aber ich habe nicht die geringste Idee, wie das zu überprüfen . Hier ist meine Sortier-Funktion:

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);
    }
}

Irgendwelche Vorschläge? Ich dachte ich könnte mit strcmp, aber ich kann nicht herausfinden, wo Sie gehören innerhalb der Funktion.

InformationsquelleAutor bardockyo | 2012-11-14
Schreibe einen Kommentar