Сортировка методом линейного выбора с обменом для массива структур - C (СИ)
Формулировка задачи:
Задача,отсортировать массив структур по температуре методом линейного выбора с обменом.Вообщем код отказывается сортировать массив структур ,прошу помощи в исправлении кода,заранее благодарен.Код:
Листинг программы
- #include <stdio.h>
- struct st
- {
- int den;
- int sred; // Sredn99 temperatura
- int dav;
- };
- int main()
- {
- int n;
- puts("Vvedite kol-vo elem-ov");
- scanf("%d",&n);
- getchar();
- struct st pogoda[n];
- struct st buf,min;
- for(int sch=0;sch<n;sch++)
- {
- puts("Den'");scanf("%d",&pogoda[sch].den);
- puts("Sred temp");scanf("%d",&pogoda[sch].sred);
- puts("Davlenie");scanf("%d",&pogoda[sch].dav);
- getchar();
- }
- int i, j,nom;
- for(i=0; i<n-1; i++)
- {
- min.den=pogoda[i].den;
- min.sred=pogoda[i].sred;
- min.dav=pogoda[i].dav;
- nom=i;
- for(j=i; j<n; j++)
- {
- if (pogoda[i].sred<min.sred)
- {
- min.den=pogoda[j].den;
- min.sred=pogoda[j].sred;
- min.dav=pogoda[j].dav;
- nom=j;
- }
- }
- buf.den=pogoda[i].den;
- buf.sred=pogoda[i].sred;
- buf.dav=pogoda[i].dav;
- //
- pogoda[i].den=min.den;
- pogoda[i].sred=min.sred;
- pogoda[i].dav=min.dav;
- //
- pogoda[nom].den=buf.den;
- pogoda[nom].sred=buf.sred;
- pogoda[nom].dav=buf.dav;
- }
- for (j=0; j<n; j++)
- {
- printf("Den' %d Temperatura %d Davlenie %d\n",pogoda[j].den,pogoda[j].sred,pogoda[j].dav);
- }
- return 0;
- }
Решение задачи: «Сортировка методом линейного выбора с обменом для массива структур»
textual
Листинг программы
- #define MAX_STRUCTURES 3
- typedef struct St {
- int day;
- int avgtemp;
- int pressure;
- } st;
- st structures[MAX_STRUCTURES];
- void swap_structures(int a, int b)
- {
- st tmp = structures[a];
- structures[a] = structures[b];
- structures[b] = tmp;
- }
- // функция ищет минимальную структуру, начиная с i-ой
- int find_min_avgtemp(int i)
- {
- int min = i;
- int min_avgtemp = structures[i].avgtemp;
- for( ++i; i < MAX_STRUCTURES; ++i ) {
- if( structures[i].avgtemp < min_avgtemp ) {
- min_avgtemp = structures[i].avgtemp;
- min = i;
- }
- }
- return min;
- }
- void sort_structures(void)
- {
- int min;
- for( int i = 0; i < MAX_STRUCTURES; ++i ) {
- min = find_min_avgtemp(i);
- if( min != i ) swap_structures(min, i);
- }
- }
- int main(void)
- {
- structures[0].avgtemp = 1;
- structures[1].avgtemp = 3;
- structures[2].avgtemp = 2;
- sort_structures();
- printf("%d %d %d\n", structures[0].avgtemp,
- structures[1].avgtemp,
- structures[2].avgtemp);
- return 0;
- }
Объяснение кода листинга программы
- Объявляется массив структур типа st с именем
structures
и размером MAX_STRUCTURES. - Создается функция swap_structures(int a, int b), которая меняет местами элементы массива с индексами a и b.
- Создается функция find_min_avgtemp(int i), которая ищет минимальное значение поля avgtemp в структурах, начиная с i-ой.
- Создается функция sort_structures(void), которая сортирует массив структур по возрастанию поля avgtemp.
- В функции main() создаются структуры с некоторыми значениями полей avgtemp.
- Вызывается функция sort_structures().
- Выводится отсортированный массив структур на экран.
- Возвращается 0, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д