Сортировка массива структур
От: __pavel  
Дата: 09.12.03 07:27
Оценка:
struct my_struct
{
char name[20];
int age;
} entry[20];

Заполняю с клавиатуры массив структур entry, а затем его необходимо вывести в порядке убывания возраста.
printf(entry[...].name, entry[...].age);
Вопрос состоит в следующем: как его отсортировать, ну скажем способом bubble ?
Если можно, то по-подробнее, в C++ я начинающий.
Re: Сортировка массива структур
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 09.12.03 07:42
Оценка:
Здравствуйте, __pavel, Вы писали:

__>   struct my_struct
__>   {
__>      char  name[20];
__>      int   age;
         bool operator < ( const my_struct &a )
        {
             return age < a.age;
        }
__>   } entry[20];


__>Заполняю с клавиатуры массив структур entry, а затем его необходимо вывести в порядке убывания возраста.

__> printf(entry[...].name, entry[...].age);
__>Вопрос состоит в следующем: как его отсортировать, ну скажем способом bubble ?
__>Если можно, то по-подробнее, в C++ я начинающий.

#include <algorithm>

std::sort(entry, entry+20);
Re: Сортировка массива структур
От: Аноним  
Дата: 09.12.03 07:49
Оценка:
Здравствуйте, __pavel, Вы писали:

__> struct my_struct

__> {
__> char name[20];
__> int age;
__> } entry[20];

__>Заполняю с клавиатуры массив структур entry, а затем его необходимо вывести в порядке убывания возраста.

__> printf(entry[...].name, entry[...].age);
__>Вопрос состоит в следующем: как его отсортировать, ну скажем способом bubble ?
__>Если можно, то по-подробнее, в C++ я начинающий.

пример номер 1
--------------

struct my_struct
{
char name[20];
int age;

bool operator< (my_struct const& right)
{
return age < right.age;
}
};

typedef std::list<my_struct> entry;

int main()
{
entry elist;

// заполнение
// ...

elist.sort();
}

пример номер 2
--------------

struct my_struct
{
char name[20];
int age;
}

bool operator< (my_struct const& left, my_struct const& right)
{
return left.age < right.age;
}

typedef std::list<my_struct> entry;

int main()
{
entry elist;

// заполнение
// ...

elist.sort(std::less<my_struct>());
}


пример номер 3
--------------

struct my_struct
{
char name[20];
int age;
}

typedef std::list<my_struct> entry;

struct age_less
: public std::binary_function<my_struct, my_struct, bool>
{
bool operator()(my_struct const& left, my_struct const& right)
{
return left.age < right.age;
}
};

int main()
{
entry elist;

// заполнение
// ...

elist.sort(age_less());
}
Re[2]: Сортировка массива структур
От: __pavel  
Дата: 09.12.03 07:51
Оценка:
Здравствуйте, Odi$$ey, Вы писали:


#include <algorithm>

Все это надо реализовать на BC++ 3.1, там я algorithm.h не нашел.
Re: Сортировка массива структур
От: Владимир_  
Дата: 09.12.03 08:16
Оценка:
Здравствуйте, __pavel, Вы писали:

Вообще на тему сортировки есть отличная книга "Фундаментальные алгоритмы на С++"
Там очень грамотно рассматриваются алгоритмы сортировки, РЕКОМЕНДУЮ
Re[2]: Сортировка массива структур
От: __pavel  
Дата: 09.12.03 08:18
Оценка:
Здравствуйте, Аноним,

Все это в Borland C++ 3.1, к великому сожалению, не катит. В лабе компилятор задан точно, и от него никуда не денешся.
Re[3]: Сортировка массива структур
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 09.12.03 08:19
Оценка:
Здравствуйте, __pavel, Вы писали:

__>Все это надо реализовать на BC++ 3.1,


тяжелый случай посмотри в его хелпе пример по функции qsort. Для общего образования здесь
Автор(ы):
В этом разделе будет рассмотрен знаменитый алгоритм ''быстрой'' сортировки, по праву считающийся самым быстрым среди неспециализированных алгоритмов сортировки. Для сравнения мы также рассмотрим один из алгоритмов сортировки, имеющих более низкую эффективность, но и более простых алгоритмов — сортировку вставками.
почитай.
Re: Сортировка массива структур
От: LaptevVV Россия  
Дата: 09.12.03 08:25
Оценка:
Здравствуйте, __pavel, Вы писали:

__> struct my_struct

__> {
__> char name[20];
__> int age;
__> } entry[20];

__>Заполняю с клавиатуры массив структур entry, а затем его необходимо вывести в порядке убывания возраста.

__> printf(entry[...].name, entry[...].age);
__>Вопрос состоит в следующем: как его отсортировать, ну скажем способом bubble ?
__>Если можно, то по-подробнее, в C++ я начинающий.
Схема такая

for(int i = 0; i < 20; ++i)
    for (int j = 0; j < 20; ++j)
        if (entry[i].age < entry[j].age) 
        { my_struct t = entry[i]; entry[i] = entry[j]; entry[j] = t; }

А отладишь и оптимизацию проделаешь — уже сам. -
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Сортировка массива структур
От: Socrat Россия  
Дата: 09.12.03 08:25
Оценка:
Здравствуйте, __pavel, Вы писали:

__> struct my_struct

__> {
__> char name[20];
__> int age;
__> } entry[20];

__>Заполняю с клавиатуры массив структур entry, а затем его необходимо вывести в порядке убывания возраста.

__> printf(entry[...].name, entry[...].age);
__>Вопрос состоит в следующем: как его отсортировать, ну скажем способом bubble ?
__>Если можно, то по-подробнее, в C++ я начинающий.

Алгоритмов сортировки полно. Если скорость неважна — берешь наипростейший и не паришься.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.