сортировка массива структур по возрастанию
Задал массив структур, необходимо выполнить сортировку samolet.kolvo_mest !!по возрастанию!!. Для моего понимания проще всего сделать методом "пузырьковой" сортировки, но не получается это сделать правильно, выходит совсем не в том порядке, что нужно. Помогите пожалуйста написать отсортировать поле с количеством мест. Буду очень благодарен!
#include<stdio.h>
#include<conio.h>
#include<limits.h>
#include<string.h>
struct cena {
float price;
char classs[10];
};
struct tip {
char name[50];
int kolvo_mest;
};
struct aeroport {
struct tip samolet; struct cena bilet;
char vzlet[80];
char posadka[80];
};
// VVOD DANNIH
void intr(struct aeroport a[], int n)
{
int i; for (i = 0; i < n; i++) {
puts("\nMESTO VZLETA: \n"); scanf("%s", &a[i].vzlet);
puts("\nMESTO POSADKI: \n"); scanf("%s", &a[i].posadka);
puts("\nNAME SAMOLETA: \n"); scanf("%s", &a[i].samolet.name);
do {
puts("\nKOL-VO MEST: \n"); scanf("%d", &a[i].samolet.kolvo_mest);
} while (a[i].samolet.kolvo_mest < 1);
do {
puts("\nPRICE BILETA: \n"); scanf("%f", &a[i].bilet.price);
} while (a[i].bilet.price < 1);
puts("\nCLASS: \n"); scanf("%s", &a[i].bilet.classs);
}
}
void PrintAndSort(struct aeroport a[], int n)
{
//sortirovka puzirikom
int tmp;
for (int i = n - 1; i >= 0; --i)
{
for (int j = 0; j < i; ++j)
{
//sravnivaem elementi massiva structur po kol-vu mest
if (a[j].bilet.price > a[j + 1].bilet.price)
{
struct aeroport tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
}
for (int i = 0; i < n; i++)
{
printf("%i) MESTO VZLETA -- %s -- MESTO POSADKI -- %s -- NAME SAMOLETA -- %s -- KOL-VO MEST -- %d -- PRICE BILTA -- %.2f -- CLASS -- %s --\n", i + 1, a[i].vzlet, a[i].posadka, a[i].samolet.name, a[i].samolet.kolvo_mest, a[i].bilet.price, a[i].bilet.classs);
}
}
// MAIN FUNCTION
main()
{
int n, i, j, m;
printf("Vvedite n:"); scanf("%i", &n);
struct aeroport a[100];
intr(a, n);
// VIVOD STRUCTURI PO CISLU
PrintAndSort(a, n);
printf("\n");
// VIVOD STRUCTURI PO SIMVOLU
for (char c = 'a'; c <= 'z'; c++)
for (i = 0; i < n; i++)
if (strchr(strlwr(a[i].vzlet), c) - a[i].vzlet == 0)
printf("%i) MESTO VZLETA -- %s -- MESTO POSADKI -- %s -- NAME SAMOLETA -- %s -- KOL-VO MEST -- %d -- PRICE BILTA -- %.2f -- CLASS -- %s --\n", i + 1, a[i].vzlet, a[i].posadka, a[i].samolet.name, a[i].samolet.kolvo_mest, a[i].bilet.price, a[i].bilet.classs);
}
Ответы (1 шт):
Автор решения: Igor
→ Ссылка
Как-то так..
#include<stdio.h>
#include<conio.h>
#include<limits.h>
#include<string.h>
struct cena {
float price;
char classs[10];
};
struct tip {
char name[50];
int kolvo_mest;
};
struct aeroport {
struct tip samolet; struct cena bilet;
char vzlet[80];
char posadka[80];
};
// VVOD DANNIH
void intr(struct aeroport a[], int n)
{
int i; for (i = 0; i < n; i++) {
puts("\nMESTO VZLETA: \n"); scanf("%s", &a[i].vzlet);
puts("\nMESTO POSADKI: \n"); scanf("%s", &a[i].posadka);
puts("\nNAME SAMOLETA: \n"); scanf("%s", &a[i].samolet.name);
do {
puts("\nKOL-VO MEST: \n"); scanf("%d", &a[i].samolet.kolvo_mest);
} while (a[i].samolet.kolvo_mest < 1);
do {
puts("\nPRICE BILETA: \n"); scanf("%f", &a[i].bilet.price);
} while (a[i].bilet.price < 1);
puts("\nCLASS: \n"); scanf("%s", &a[i].bilet.classs);
}
}
void PrintAndSort(struct aeroport a[], int n)
{
//sortirovka puzirikom
int tmp;
for (int i = n - 1; i >= 0; --i)
{
for (int j = 0; j < i; ++j)
{
//sravnivaem elementi massiva structur po kol-vu mest
if (a[j].samolet.kolvo_mest > a[j + 1].samolet.kolvo_mest)
{
struct aeroport tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
}
for (int i = 0; i < n; i++)
{
printf("%i) MESTO VZLETA -- %s -- MESTO POSADKI -- %s -- NAME SAMOLETA -- %s -- KOL-VO MEST -- %d -- PRICE BILTA -- %.2f -- CLASS -- %s --\n", i + 1, a[i].vzlet, a[i].posadka, a[i].samolet.name, a[i].samolet.kolvo_mest, a[i].bilet.price, a[i].bilet.classs);
}
}
// MAIN FUNCTION
main()
{
int n, i, j, m;
printf("Vvedite n:"); scanf("%i", &n);
struct aeroport a[100];
intr(a, n);
// VIVOD STRUCTURI PO CISLU
PrintAndSort(a, n);
printf("\n");
// VIVOD STRUCTURI PO SIMVOLU
for (char c = 'a'; c <= 'z'; c++)
for (i = 0; i < n; i++)
if (strchr(strlwr(a[i].vzlet), c) - a[i].vzlet == 0)
printf("%i) MESTO VZLETA -- %s -- MESTO POSADKI -- %s -- NAME SAMOLETA -- %s -- KOL-VO MEST -- %d -- PRICE BILTA -- %.2f -- CLASS -- %s --\n", i + 1, a[i].vzlet, a[i].posadka, a[i].samolet.name, a[i].samolet.kolvo_mest, a[i].bilet.price, a[i].bilet.classs);
}