Здравейте. Трябва да сортирам списък(по намаляващ ред на полето step) реализиран чрез указатели. Нещо обърквам при сортирането и не мога да разбера какво е то. Дебъгера казва, че има проблем при: return a->step - b->step;
Дефиниция на структурата:
struct zapis {
float step,step1;
float koef,koef1;
zapis *next,*last;};
typedef zapis* po;
po first=NULL,last=NULL,first1=NULL,last1=NULL,first2=NULL,last2=NULL,p,p1,p2;
Функцията за сортиране:
float cmp(zapis *a, zapis *b) {
return a->step - b->step;
}
zapis *listsort(zapis *first) {
zapis *p, *q, *e, *last;
int insize, nmerges, psize, qsize, i;
if (!first)
return NULL;
insize = 1;
while (1) {
nmerges = 0;
while (p) {
nmerges++;
q = p;
psize = 0;
for (i = 0; i < insize; i++) {
psize++;
q = q->next;
if (!q) break;
}
qsize = insize;
while (psize > 0 || (qsize > 0 && q)) {
if (psize == 0) {
e = q; q = q->next; qsize--;
} else if (qsize == 0 || !q) {
e = p; p = p->next; psize--;
} else if (cmp(p,q) <= 0) {
e = p; p = p->next; psize--;
} else {
e = q; q = q->next; qsize--;
}
if (last) {
last->next = e;
} else {
first = e;
}
last = e;
}
p = q;
}
last->next = NULL;
if (nmerges <= 1)
return first;
insize *= 2;
}
}
Казано с други думи: опитвам се да пригодя mergesort за структурата ми, но безуспешно. Бихте ли помогнали?