Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2013, 18:52   #1
*Fantom*
Пользователь
 
Регистрация: 28.05.2013
Сообщений: 32
По умолчанию сортировка структуры с++

Нужно отсортировать эту структуру:
Код:
struct Tlist{
	char name[20];
	char dolg[20];
	int zarp;
	int stag;
	int voz;
	Tlist *next,*prev;};
Она состоит из 4 элементов
нужно сортировать по переменой voz.
Зарание спасибо...

Последний раз редактировалось *Fantom*; 17.10.2013 в 22:58.
*Fantom* вне форума Ответить с цитированием
Старый 18.10.2013, 12:20   #2
Nuklon
Форумчанин
 
Аватар для Nuklon
 
Регистрация: 05.04.2012
Сообщений: 134
По умолчанию

Код:
#include <iostream>



struct Tlist{
    char name[20];
    char dolg[20];
    int zarp;
    int stag;
    int voz;
    Tlist *next,*prev;
};

// добавление элемента
void  add(Tlist*& head, Tlist*& tail,
          const char* name, const char* dolg, int zarp, int stag, int voz) {

   Tlist* n = new Tlist();
   n->next  = n->prev  = NULL;
   strcpy(n->name, name);
   strcpy(n->dolg, dolg);
   n->zarp = zarp;
   n->stag = stag;
   n->voz  = voz;

   if(head == NULL)
       head = tail = n;
   else {
       tail->next = n;
       n->prev    = tail;
       tail       = n;
   }
}



// сортировка слиянием
template<typename T>
T* merge_sort(T* lst, T*& ptail, bool (*pred_cmp)(const T*, const T*)) {
     if((lst == NULL) || (lst->next == NULL))
           return lst;

     T* ptr, *next, *tail;
     T* iter = lst;
     T* last = lst;

     ptr = next = tail = NULL;
     for(T* tmp = lst; (tmp != NULL) && (tmp->next != NULL); tmp = tmp->next->next) {
           last = iter;
           iter = iter->next;
     }
     last->next = NULL;

     lst  = merge_sort(lst,  ptail, pred_cmp);
     iter = merge_sort(iter, ptail, pred_cmp);

     for(; (lst != NULL) || (iter != NULL); ) {
           if(iter == NULL) {
                next = lst;
                lst  = lst->next;
           } else if(lst == NULL) {
                next = iter;
                iter = iter->next;
           } else if((*pred_cmp)(lst, iter)) {
                next = lst;
                lst  = lst->next;
           } else {
                next = iter;
                iter = iter->next;
           }

           if(ptr == NULL)
                ptr = next;
           else
                tail->next = next;
     
           next->prev = tail;
           tail       = next;
    }

    ptail = tail;
    return ptr;
}




bool  sort_asc(const Tlist* a, const Tlist* b) {
     return (a->voz < b->voz);
}





int main(void){
    Tlist* head = NULL, *tail = NULL;

    for(int i = 0; i < 40; i++)
        add(head, tail, "", "", 0, 0, 18 + std::rand() % 40);

    head = merge_sort(head, tail, sort_asc);

    Tlist* t;
    while(head != NULL) {
        std::cout << head->voz << ' ';

        t    = head;
        head = head->next;
        delete t;
    }
    return 0;
}
Пример работы кода
Nuklon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка Структуры Chainik! Общие вопросы C/C++ 7 29.09.2013 21:05
[C]. Сортировка структуры M_Asja Помощь студентам 0 20.01.2013 21:02
Сортировка структуры Proger_1 Win Api 2 04.12.2012 20:45
сортировка структуры Си jana89 Общие вопросы C/C++ 5 27.11.2011 20:48
сортировка структуры vo_sa Общие вопросы C/C++ 1 25.06.2009 14:16