通过C中的一个选定属性对struct进行排序

时间:2016-04-22 05:16:37

标签: c arrays sorting struct comparator

我在排序包含3个infos类型的结构数组时遇到了麻烦。我想订购其中一个信息,然后组织其他2个信息,但我正在使用heapsort,不知道如何更改代码以自动重组。有什么逻辑提示可以帮助我吗?这是结构

typedef struct{
    int orig;
    int dest;
    float cost;
}infos;

感谢。我可以添加任何有助于人们帮助我的信息!

[编辑]

void build ( Armaz x[], int n ){
int i;
float val;
int s;
int f;
for (i = 1; i<n; i++){
    val = x[i].cost;
    s = i;
    f = (s-1)/2;
    while (s>0 && x[f].cost<val){
        x[s].cost = x[f].cost;
        s = f;
        f = (s-1) / 2;
        }
    x[s].cost = val;
    }
}


void heapsort (infos x[], int n){
build(x,n);
int i;
int s;
int f;
float vali ;
for (i = n - 1 ; i > 0 ; i--){
    vali = x[i].cost;
    x[i].cost = x[0].cost;
    f = 0   ;
    if (i == 1){
        s = -1;
    }
    else s = 1;
    if ( i > 2 && x[2].cost > x[1].cost) s = 2 ;
    while ( s >= 0 && vali < x[s].cost){
        x[f].cost = x[s].cost;
        f = s;
        s = 2 * f + 1;
        if ( s + 1 <= i - 1 && x[s].cost < x[s + 1].cost ) s++;
        if (s > i-1) s = -1;
        }
    x[f].cost = vali;
    }
}

1 个答案:

答案 0 :(得分:1)

即使您实施自己的排序功能,我建议您仔细查看the standard qsort function的工作原理。

简而言之:它有一个参数,它是一个指向用于比较的函数的指针。该函数接收指向应该比较的两个“对象”的指针,并且可以做任何想要比较两个“对象”的东西。这意味着可以有三个不同的比较函数,一个用于结构的每个成员,并在需要时传递适当的一个。