如何选择对某些结构进行排序

我必须按年({ano),月(mes),天(dia)排序一些文件,但是我只能按年份排序。

struct registro{ 

    short ano;
    char mes;
    char dia;
    char hora;
    char min;
    char seg;
};

void selectionSort(struct registro *dados,int n){   

    int i,j,menor;
    struct registro aux;
    for(i = 0; i < n - 1; i++){
        menor = i;
        for(j = i + 1; j < n; j++){
            if(dados[menor].ano > dados[j].ano)
            {
                menor = j;
            }
            if(i != menor){
                aux = dados[i];
                dados[i] = dados[menor];
                dados[menor] = aux;
            }
        }   
    }
}
xsfh12345 回答:如何选择对某些结构进行排序

检查标准C库qsort函数的签名人

void qsort (void* base,size_t num,size_t size,int (*compar)(const void*,const void*));

如您所见,最后一个参数是指向用于比较值的函数的指针(回调)。您在selectionSort中使用固定的gretter运算符dados[menor].ano > dados[j].ano。为了使其通用,可以进行下一个修改:

static registroYearCmp(struct registro* lhs,struct registro *rhs) 
{
  return lhs->ano - rhs->ano;
}

static registroMonthCmp(struct registro* lhs,struct registro *rhs) 
{
  return lhs->mes - rhs->mes;
}

static registroDayCmp(struct registro* lhs,struct registro *rhs) 
{
 return lhs->dia - rhs->dia;
}

void selectionSort(struct registro *dados,int n,*(compare_registro)(struct registro*,struct registro*) ){   
......
            if( compare_registro(dados[menor],dados[j]) > 0 )
......
}
.......
 /* Sort by year */
 selectionSort(dados,16,registroYearCmp);
 /* Sort by month */
 selectionSort(dados,registroMonthCmp);
 /* Sort by day */
 selectionSort(dados,registroDayCmp);
本文链接:https://www.f2er.com/3164690.html

大家都在问