Вопрос относится скорее в общем к программированию, но т.к. я знаю хорошо лишь С :)), то спрошу в данной теме. У меня есть таблица: Название|П1|П2|П3|П4|....В общем до фига П№, которые содержат значения типа int. Существует ли алгоритм, благодаря которому я смогу упорядочить список с условием наиболее близкого соответствия по всем параметрам одной из записей. Например, есть у меня Вася 435 234 36 122 И надо мне, чтобы было приблизительно так: Вася 435 234 36 122 Петя 435 233 38 120 Витя 430 238 30 128 и т.п. Т.е. отсортировать массив по всем признакам сразу, а не только по одному.
Здравствуйте, InZest! Необходимо ввести на множестве записей отношение порядка. Это зависит от задачи , т.е. с какой целью производится сортировка. Так что это решать автору. Можно, например, вычислять функцию от всех признаков и сравнивать ее значения. Только множество должно быть полностью упорядочено, т.е. не должно быть двух элементов, которые нельзя сравнить друг с другом. После того как отношение порядка введено можно использовать обычные алгоритмы сортировки, которые детально описаны в третьем томе "Исскуство пролграммирования" Д.Кнута. Ответ отправлен: 05.06.2004, 22:26 Отправитель: www Отвечает vitya
Здравствуйте, InZest! C так С. Если меня не подводит память, то qsort принимает в виде параметра функцию сравнения. Пишешь ее цепочечным образом. если первый параметр меньше второго, или первые равны, но вторые меньше, или первые два равны, но третьи меньше, и т.д. Божно оптимизировать процедуру, делать большие вложения лог. выражений, пытаться сминимизировать и т.д.
Ответ отправлен: 05.06.2004, 12:46 Отправитель: vitya Отвечает bocha
Здравствуйте, InZest! 43523436122 43523338120 43023830128 если это не сортировка (объединенных цепочек) по убыванию...?:( Еще в С++ существует такое понятие как перегрузка операторов: создаете класс в который записываете данные из таблицы,
struct table1{ string name; int value[3]; int operator<(const table1& t)const; };
для него перегружаются операторы <() >() ==() !=() <=() >=() , для вашего примера
а дальше используются алгоритмы сортировки из STL. ЗЫ:давно несталкивался с этим но помоему для хранения value в вашем случае лучще всего использовать basic_string<int>, тогда внутри класса пишем basic_string<int>
value;, а в теле оператора одну строчку: return value < t.value; Ответ отправлен: 05.06.2004, 12:13 Отправитель: bocha
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.