C-决策函数,用于交换结构数组中的字符串或数字

时间:2018-06-08 14:48:18

标签: c sorting pointers struct

typedef struct Workers
{
char id[10];
char *fName;
char *lName;
int  yob;
int monthlyHours;
int salary;



}workers;

所以我有一个充满工人细节的结构。 在主菜单中,用户输入选项以: 1.sort by id 2.按名字排序 3.按月计算 我需要创建一个决策函数,它是一个指针函数,它将通过字符串或整数按所选选项对结构进行排序。

我写了一个冒泡排序函数和一个交换函数,但是没有一点线索如何制作一个可以处理所有类型排序的决策函数

交换功能的当前状态

int me_compare(workers *me1, workers *me2) {
int surnameResult;

surnameResult = strcmp(me1->fName, me2->fName);

return surnameResult;
}

排序功能的当前状态

void sortStruct(workers newWorkers[N], int numOfSort)
{
workers tmp;
workers tmp2;
int i = 0;
int j = 0;

int result;
int swapped;
for ( i = 0;( i < N-1); i++)
{
    swapped = 0;
    for (j = 0; j < N-i - 1; j++)
    {
        tmp = newWorkers[j];
        tmp2 = newWorkers[j + 1];
        result = me_compare(&tmp, &tmp2);
        if (result == 1)
        {
            newWorkers[j] = tmp2;
            newWorkers[j + 1] = tmp;
            swapped = 1;
        }
    }
    if (swapped == 0)
        break;

}

}

任何提示,如何处理这个?

1 个答案:

答案 0 :(得分:0)

对于int值,我们使用

for(i = 0; i < n-1; i++)
{
   for(j = 0 ; , j = n-i-1; j++)
   {
       if(value[i]>value[i+1])
           swap(value[i],value[i+1]);
   }
}

类似于struct函数,我们可以使用

    if(workers[i]->salary > workers[i+1]->salary)
c ++中的

模板用于编写泛型类型的函数,但在c中我们没有这个工具

我建议你为int和char类型编写两个不同的swap函数,并在排序中编写一个额外的代码来识别它是char还是int并根据这个使用swap函数函数