Сортировка методом линейного выбора с обменом для массива структур - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Задача,отсортировать массив структур по температуре методом линейного выбора с обменом.Вообщем код отказывается сортировать массив структур ,прошу помощи в исправлении кода,заранее благодарен.Код:
Листинг программы
  1. #include <stdio.h>
  2. struct st
  3. {
  4. int den;
  5. int sred; // Sredn99 temperatura
  6. int dav;
  7. };
  8. int main()
  9. {
  10. int n;
  11. puts("Vvedite kol-vo elem-ov");
  12. scanf("%d",&n);
  13. getchar();
  14. struct st pogoda[n];
  15. struct st buf,min;
  16. for(int sch=0;sch<n;sch++)
  17. {
  18. puts("Den'");scanf("%d",&pogoda[sch].den);
  19. puts("Sred temp");scanf("%d",&pogoda[sch].sred);
  20. puts("Davlenie");scanf("%d",&pogoda[sch].dav);
  21. getchar();
  22. }
  23. int i, j,nom;
  24. for(i=0; i<n-1; i++)
  25. {
  26. min.den=pogoda[i].den;
  27. min.sred=pogoda[i].sred;
  28. min.dav=pogoda[i].dav;
  29. nom=i;
  30. for(j=i; j<n; j++)
  31. {
  32. if (pogoda[i].sred<min.sred)
  33. {
  34. min.den=pogoda[j].den;
  35. min.sred=pogoda[j].sred;
  36. min.dav=pogoda[j].dav;
  37. nom=j;
  38. }
  39. }
  40. buf.den=pogoda[i].den;
  41. buf.sred=pogoda[i].sred;
  42. buf.dav=pogoda[i].dav;
  43. //
  44. pogoda[i].den=min.den;
  45. pogoda[i].sred=min.sred;
  46. pogoda[i].dav=min.dav;
  47. //
  48. pogoda[nom].den=buf.den;
  49. pogoda[nom].sred=buf.sred;
  50. pogoda[nom].dav=buf.dav;
  51. }
  52. for (j=0; j<n; j++)
  53. {
  54. printf("Den' %d Temperatura %d Davlenie %d\n",pogoda[j].den,pogoda[j].sred,pogoda[j].dav);
  55. }
  56. return 0;
  57. }

Решение задачи: «Сортировка методом линейного выбора с обменом для массива структур»

textual
Листинг программы
  1. #define MAX_STRUCTURES 3
  2.  
  3. typedef struct St {
  4.     int day;
  5.     int avgtemp;
  6.     int pressure;
  7. } st;
  8.  
  9. st structures[MAX_STRUCTURES];
  10.  
  11. void swap_structures(int a, int b)
  12. {
  13.     st tmp = structures[a];
  14.     structures[a] = structures[b];
  15.     structures[b] = tmp;
  16. }
  17.  
  18. // функция ищет минимальную структуру, начиная с i-ой
  19.  
  20. int find_min_avgtemp(int i)
  21. {
  22.     int min = i;
  23.     int min_avgtemp = structures[i].avgtemp;
  24.     for( ++i; i < MAX_STRUCTURES; ++i ) {
  25.         if( structures[i].avgtemp < min_avgtemp ) {
  26.             min_avgtemp = structures[i].avgtemp;
  27.             min = i;
  28.         }
  29.     }
  30.     return min;
  31. }
  32.  
  33. void sort_structures(void)
  34. {
  35.     int min;
  36.     for( int i = 0; i < MAX_STRUCTURES; ++i ) {
  37.         min = find_min_avgtemp(i);
  38.         if( min != i ) swap_structures(min, i);
  39.     }
  40. }
  41.  
  42. int main(void)
  43. {
  44.     structures[0].avgtemp = 1;
  45.     structures[1].avgtemp = 3;
  46.     structures[2].avgtemp = 2;
  47.     sort_structures();
  48.     printf("%d %d %d\n", structures[0].avgtemp,
  49.                          structures[1].avgtemp,
  50.                          structures[2].avgtemp);
  51.     return 0;
  52. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы