EDIT: Видимо, вы можете использовать QSort, но вы действительно должны прочитать это, прежде чем делать что-нибудь еще. И почитайте о том, как использовать структуры, а также связанные списки
Метод 1
Я также считаю, вы должны настроить структуры в виде связанного списка, который будет сортировать, как элементы добавляются к нему. Нет необходимости иметь индивидуальные структуры для каждого поставщика продуктов питания. Скорее всего, вы можете иметь что-то вроде этого:
struct fastFoodVendor{
char *chain;
char *name;
char *address;
char *foodType;
int avgCosts;
struct fastFoodVendor *next
}
Так что теперь, когда вы добавляете на структуру вы включить его в связанный список, и вид, как вы добавляете детали.
Допустит, у вас уже есть 3 в структурах списка с ценой они средней следующим образом:
5-10-15
Так что первая структура с ценой они средней 5 имеет указатель под названием next
указывая на struct с ценой avg 10, которая, в свою очередь, имеет указатель под названием next
для структуры со средней ценой 15.
Теперь вы хотите добавить цепочку со средней ценой 13 в этот список, вам нужно будет иметь какой-то метод добавления, который будет работать следующим образом:
Помните, что сначала необходимо иметь несколько переменных ... один - это структура, которая называется головкой, указывающей на первый элемент в вашем списке (5) (struct fastFoodVendor *head
). Вы установите это значение, когда будет добавлен первый элемент а затем обновите его, как требуется вашему списку.
Итак, я бы предложил другой указатель на структуру, который называется temp
, который будет проходить через список до тех пор, пока не будет найдена правильная позиция. Для этого у меня будет цикл while.
while(temp->next != null){
if(temp->next->avgCost > structToAdd->avgCost){
structToAdd->next = temp->next;
temp->next = structToAdd;
}
else{
temp = temp->next;
}
}
Что это будет сделать, это вставить 13 в списке до 15
Позвольте мне объяснить, что делает это в то время как петля ... вы должны иметь условный набор для temp->next != null
, потому что если вы попытаетесь доступ к информации из нулевого указателя, вы получите segFault.
Однажды в цикле вы проверите, имеет ли узел впереди более высокий avgCost, чем тот узел, который вы пытаетесь вставить. Итак, temp
указывает на 5, вы проверяете, превышает ли avgCost следующего узла больше 13, но его 10, поэтому вы перемещаетесь вперед в списке, устанавливая temp = узел с 10. Теперь, когда вы находитесь в 10, вы проверяете на см., если следующий узел (15) больше 13 ... ну это ...так что вы все еще на 10, и вы хотите установить этот узел рядом с структурой, которую хотите добавить, но прежде чем вы это сделаете, вам нужно установить узел, который вы хотите добавить (13), следующий указатель на то, что в настоящий момент указывает temp->next
to, иначе вы потеряете этот узел, потому что ничто не будет указывать на него, как только вы укажете следующий указатель 10 на узел 13.
Я знаю, что это очень долго и может быть ABIT сложным, поэтому здесь это метод, который я лично не хотел бы использовать, но он должен работать
Метод 2
У вас есть фиксированный массив из структур, но это также будет работать только в том случае, если вы используете один тип структуры (то есть fastFoodVendor
, который я перечислял выше), и у вас есть фиксированный массив, который вы можете сортировать так, как если бы вы использовали обычный массив, но я до сих пор не верю, что вы способный использовать qSort, поэтому вам придется разработать собственный метод сортировки и изменения элементов в массиве. Причина, по которой я бы не выбрал этот метод, состоит в том, что накладные расходы и много времени впустую (в зависимости от того, сколько данных вы имеете в виду, для вашего случая я предполагаю, что разница незначительна). Одна из лучших вещей о C - то, как у нее есть способность быть динамичной, и это то, что делает связанный список.
Посмотрите на этот связанный список учебника:http://www.cprogramming.com/tutorial/c/lesson15.html следует надеяться помочь
Каких сортировки вы пробовали? – m0skit0
Да, вы можете использовать qsort, но прежде чем вы начнете думать о сортировке, я бы посоветовал вам немного почитать о том, как использовать структуры и массивы. Наличие нескольких структур с одинаковыми определениями - не выход. Если вы хотите хранить данные о ресторанах, создайте для них тип структуры, а затем массив, чтобы держать отдельные рестораны. – jpw