Tablice struktur qsort

0

Cześć,
mam problem z sortowaniem tablicy struktur, konkretniej program ma sortowac rosnąco wzgledem pola 'dlugosc', a tego nie robi i nie moge znaleźć błędu, pomożecie? ;)

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
double length(double x, double y, double z);
int compare(const void * a, const void * b);
struct wektory {
	double v1;
	double v2;
	double v3;
};
struct abc {
	struct wektory vec;
	double dlugosc;
};
int main()
{
	srand(time(0));
	struct abc tab[10];
	
	for (int i = 0; i < 10; i++)
	{
		tab[i].vec.v1= 1.0 + (double)rand() / RAND_MAX* (10.0 - 1.0);
		tab[i].vec.v2 = 1.0 + (double)rand() / RAND_MAX* (10.0 - 1.0);
		tab[i].vec.v3 = 1.0 + (double)rand() / RAND_MAX* (10.0 - 1.0);

	}
	for (int i = 0; i < 10; i++)
	{
		printf("abc[%d].vec.v1 = %.1f\t\t", i, tab[i].vec.v1);
		printf("abc[%d].vec.v1 = %.1f\t\t", i, tab[i].vec.v2);
		printf("abc[%d].vec.v1 = %.1f\t\t", i, tab[i].vec.v3);
		puts(" ");

	}
	for (int i = 0; i < 10; i++)
	
		tab[i].dlugosc = length(tab[i].vec.v1, tab[i].vec.v2, tab[i].vec.v3);
	printf("\n\n");
	
	for (int i = 0; i < 10; i++)
	
		printf("tab[%d].dlugosc = %.1f\n", i, tab[i].dlugosc);
	printf("\n\n");
	
	qsort(tab, 10, sizeof(double), compare);
	for (int i = 0; i < 10; i++)

		printf("tab[%d].dlugosc = %.1f\n", i, tab[i].dlugosc);
	
	return 0;
}
double length(double x, double y, double z)
{
	double dl = x*x + y*y + z*z;
	dl = sqrt(dl);
	return dl;
}
int compare(const void * a, const void * b)
{
	 struct abc * c = (struct abc *)a;
	 struct abc * d = (struct abc *)b;
	if (c->dlugosc < d->dlugosc)
		return -1;
	else if (c->dlugosc == d->dlugosc)
		return 0;
	else
		return 1;
}
1

qsort(tab, 10, sizeof(double), compare);

A ten sizeof(double) to jak ma się do sizeof(struct abc), albo, lepiej, sizeof *tab?

0

racja tu jest błąd, ale mimo to dalej źle sortuje :/

0

Dobra, jednak to wina kompilatora :/
Dzięki wielkie!
A mozesz jeszcze wytlumaczyc dlaczego musi byc sizeof(*tab) a nie sizeof(tab)? Nie łapie tego

0

Bo funkcja oczekuje wielkości elementu, a nie tablicy.

0

Dziękuję serdecznie!

1 użytkowników online, w tym zalogowanych: 0, gości: 1