Сортировка методом линейного выбора с обменом для массива структур - 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;
}

Объяснение кода листинга программы

  1. Объявляется массив структур типа st с именем structures и размером MAX_STRUCTURES.
  2. Создается функция swap_structures(int a, int b), которая меняет местами элементы массива с индексами a и b.
  3. Создается функция find_min_avgtemp(int i), которая ищет минимальное значение поля avgtemp в структурах, начиная с i-ой.
  4. Создается функция sort_structures(void), которая сортирует массив структур по возрастанию поля avgtemp.
  5. В функции main() создаются структуры с некоторыми значениями полей avgtemp.
  6. Вызывается функция sort_structures().
  7. Выводится отсортированный массив структур на экран.
  8. Возвращается 0, чтобы указать, что программа успешно завершилась.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.833 из 5
Похожие ответы