Отсортировать элементы списка (структуры) - C (СИ)
Формулировка задачи:
Привет всем. Подскажите, как можно сортануть элементы списка. Есть список книг и нужно упорядочить их по количеству страниц. Вот пример:
#include <stdio.h>
#include <cs50.h>
int main (void)
{
typedef struct list
{
char *name;
int pages;
struct list *next;
} list;
list *book1, *book2,*book3;
book1 = book2 = book3 = NULL;
book1 = malloc(sizeof(list));
book1->pages = 200;
book1->next = NULL;
book2 = malloc(sizeof(list));
book2->pages = 150;
book2->next = NULL;
book3 = malloc(sizeof(list));
book3->pages = 300;
book3->next = NULL;
book1->next = book2;
book2->next = book3;
book3->next = NULL;
list *ptr1;
ptr1 = book1;
list *ptr2;
ptr2 = book1;
while(ptr1!=NULL)
{
while(ptr2!=NULL)
{
if(ptr2->next->pages < ptr2->pages)
{
list *minbook;
minbook=ptr2->next;
ptr2->next=ptr2;
ptr2=minbook;
}
ptr2=ptr2->next;
}
ptr1=ptr1->next;
}
ptr1=ptr2;
while(ptr1!=0)
{
printf("%d\n",ptr1->pages);
}
}Решение задачи: «Отсортировать элементы списка (структуры)»
textual
Листинг программы
int n = 3;
list *books = malloc(sizeof(list)*n);
books[0] = *book1;
books[1] = *book2;
books[2] = *book3;
for (int i = 0; i < n; i++)
printf("%d\n", books[i].pages);
puts("\n\n");
for (int i = 0; i<n-1; i++)
for (int j = 0; j<n-1; j++)
if (books[j+1].pages < books[j].pages)
{
temp = books[j+1];
books[j+1] = books[j];
books[j] = temp;
}
for (int i = 0; i < n; i++)
printf("%d\n", books[i].pages);