Как я могу создать универсальную функцию для сортировки массива структур? - PullRequest
0 голосов
/ 18 мая 2019

Я работаю над этой программой для сдачи экзамена в университете.Мне нужно отсортировать пассажирский массив с помощью алгоритма сортировки (я выбираю пузырьковую сортировку из-за его простоты).Мне нужно создать универсальную функцию и передать в качестве формальных параметров: список объектов, которые я хочу отсортировать;- критерий сортировки.

Так что я думаю, что мне придется создать только 1 увеличивающуюся функцию сортировки и 1 уменьшающую функцию сортировки и передать им параметры для сортировки.

Я уже пыталсяпередать char * file_name в функцию, но я думаю, что я не прав.

int passengersIncreasingBubbleSort_Birthyear(passengers test[], int x) {
    int i = 0, j = 0, min_idx, flag = 0;

    passengers temp;

    for (i = 0; i < x; i++) {
        min_idx = i;
        for (j = i + 1; j < x; j++) {
            if (test[j].birth_date.year < test[min_idx].birth_date.year) {
                min_idx = j;
            }
        }
        temp = test[min_idx];
        test[min_idx] = test[i];
        test[i] = temp;
        flag = 1;
    }

    return flag;
}

Я пробовал это:

int passengersIncreasingBubbleSort_Birthyear(passengers test[], int x, char *value1, char *value2) {
    int i = 0, j = 0, min_idx, flag = 0;

    passengers temp;

    for (i = 0; i < x; i++) {
        min_idx = i;
        for (j = i + 1; j < x; j++) {
            if (value1 < value2) {
                min_idx = j;
            }
        }
        temp = test[min_idx];
        test[min_idx] = test[i];
        test[i] = temp;
        flag = 1;
    }

    return flag;
}

Но это не работает, как ожидалось.

Хорошо, я достиг этого.

int cmpfunction_Increasing_Birthdate (const void * a, const void * b)
{

  passengers *passengerA = (passengers *)a;
  passengers *passengerB = (passengers *)b;

  return ( passengerA->signup_date.year - passengerB->signup_date.year );
}

и это мой звонок:

    qsort(array, x, sizeof(passengers), cmpfunction_Increasing_Birthdate);

Теперь вопрос, как я могу также сравнивать год, месяц и день?Могу ли я сделать это в той же функции сравнения?

...