У меня есть связанный список, который я пытаюсь сортировать от наименьшего до наибольшего по цене. вот то, что я до сих порсвязанный список сортировать функцию только петли один раз
struct part {
char* name;
float price;
int quantity;
struct part *next;
};
typedef struct part partType;
partType *sort_price(partType **item) {
int check = 0;
if (*item == NULL || (*item)->next == NULL)
return *item;
else {
partType *temp1 = *item;
partType *temp2 = (*item)->next;
do{
check = 0;
while (temp2 != NULL && temp2->next != NULL){
if (temp2->price > temp2->next->price){
temp1->next = temp2->next;
temp2->next = temp2->next->next;
temp1->next->next = temp2;
check = 1;
}
temp1 = temp2;
temp2 = temp2->next;
}
}while (check == 1);
}
return *item;
}
список уже заполнен, но когда я вызвать функцию сортировки она меняет местами только первые два узла, которые удовлетворяют условию в, если заявление. Я не понимаю, почему он не делает проверку снова после того, как два указателя темпа увеличиваются.
Невозможно сортировать один цикл. Нет ... – UmNyobe
Что вы обнаружили, когда вы перешли через вашу программу в отладчике или когда вы добавили заявления печати для наблюдения за значениями промежуточных переменных? –
Сортировка связанного списка. Хлоп. Если это не домашнее задание, лучше делать это, чем писать собственную реализацию сорта пузыря. –