【发布时间】:2021-07-16 15:24:00
【问题描述】:
让我们定义一个名为“Edge”的结构。
#include <stdio.h>
#include <stdlib.h>
struct Edge{
int first;
int second;
float score;
};
struct Edge* newEdge(int first, int second, float score){
struct Edge* edge = (struct Edge*)malloc(sizeof(struct Edge*));
edge->first = first;
edge->second = second;
edge->score = score;
return edge;
}
给定一个边数组,每个边由两个顶点和一个分数组成,我必须按分数的降序/升序对边进行排序。我写了一个比较器函数。以下是我尝试过的。但是,它不会产生正确的输出。
int comparator_function(const void *v1, const void *v2){
struct Edge* e1 = (struct Edge*) v1;
struct Edge* e2 = (struct Edge*) v2;
if(e1->score < e2->score){
return 1;
}
return 0;
}
int main(){
struct Edge* edges[5];
edges[0] = newEdge(1, 2, 1.23);
edges[1] = newEdge(4, 3, 3.222);
edges[2] = newEdge(2, 2, 5.222);
edges[3] = newEdge(5, 1, 4.222);
edges[4] = newEdge(3, 4, 2.4);
for(int i=0;i<5;i++){
printf("%d, %d, %f\n", edges[i]->first, edges[i]->second, edges[i]->score);
}
printf("\n\n");
qsort(edges, 5, sizeof(struct Edge*), comparator_function);
for(int i=0;i<5;i++){
printf("%d, %d, %f\n", edges[i]->first, edges[i]->second, edges[i]->score);
}
return 0;
}
我得到的快速排序的输出是 -
4, 3, 3.222000
5, 1, 4.222000
2, 2, 5.222000
1, 2, 1.230000
3, 4, 2.400000
我不确定我的比较功能是否正确。任何帮助将不胜感激。
【问题讨论】: