如何创建通用函数对结构数组进行排序?

时间:2019-05-18 00:05:05

标签: c arrays sorting struct bubble-sort

我正在为我的大学考试开发此程序。我需要使用排序算法对乘客数组进行排序(由于其简单性,我选择Bubblesort)。 我需要创建一个泛型函数并将其作为形式参数传递: -我要排序的对象列表; -一种排序标准。

所以我认为我只需要创建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);

现在的问题是,我又如何比较年,月和日?我可以在同一比较功能中做到吗?

0 个答案:

没有答案