Сортировка методом линейного выбора с обменом для массива структур - 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, чтобы указать, что программа успешно завершилась.