Автор Тема: Помощ за сортиране на едносвързан списък  (Прочетена 719 пъти)

NqqmNet

  • Напреднали
  • *****
  • Публикации: 12
    • Профил
Здравейте. Трябва да сортирам списък(по намаляващ ред на полето 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 за структурата ми, но безуспешно. Бихте ли помогнали?         
                                                 
                   
Активен