Мне нужно заказать массив структуры данных, который содержит информацию, касающуюся происхождения узла, места назначения и веса. проблема не упорядочена должным образом, потому что если два значения равны array.originNode просто принимает первое полученное вами значение, а не так, как должно быть упорядочено.
Вот как мой код упорядочивает структуру
0 1 30
1 3 22
2 3 20
3 5 20
3 4 15
Process returned 0 (0x0) execution time : 0.015 s
Вот как это следует заказать
0 1 30
1 3 22
2 3 20
3 4 15
3 5 20
Я думаю, что проблема в функции, которую я передаю в качестве параметра в qsort, которая не выполняет правильное сравнение. Как изменить функцию сравнения на мой код, чтобы правильно отсортировать массив struct?
это мой полный код
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <unistd.h>
typedef struct dataNodes{
int originNode;
int destinationNode;
int weight;
struct dataNodes *next;
} ARRAYS;
int function (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
int main() {
ARRAYS array[6];
int n = 5, i;
array [0].originNode = 3;
array [1].originNode = 3;
array[2].originNode = 1;
array[3].originNode = 0;
array[4].originNode = 2;
array [0].destinationNode = 4 ;
array [1].destinationNode = 5;
array[2].destinationNode = 3;
array[3].destinationNode = 1;
array[4].destinationNode = 3;
array [0].weight = 15;
array [1].weight = 20;
array[2].weight = 22;
array[3].weight = 30;
array[4].weight = 20;
qsort(array,n,sizeof(array[0]),function);
for(i=0; i<n; i++)
{
printf("%d %d %d\n",array[i].originNode,array[i].destinationNode,
array[i].weight);
}
return 0;
}