Реализация быстрой сортировки - C (СИ) (250463)

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

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

Есть массив структур STUDENT, в который мы, кроме всего остального, вводим 5 оценок. Нужно отсортировать массив структур по среднему балу этих оценок. Я записываю средние баллы в массив arr. В чем проблема: сортировка работает правильно с обычным массивом, но когда ты меняешь местами студентов, должен менять и их средний балл, а то сравниваешь значения, которые должны были бы быть отсортированы, а они не отсортированы. Я впихнул в сортировку сортирование среднего балла, но чет не заработало всё равно.
Листинг программы
  1. #include
  2. #define N 5
  3. struct STUDENT
  4. {
  5. char name[20];
  6. int group;
  7. int mark[N];
  8. };
  9. void Hoar_sort(struct STUDENT stud[N], float *arr, int l,int r);
  10. int main(void)
  11. {
  12. struct STUDENT stud[N];
  13. printf("Write:\n");
  14. for (int i = 0; i < N; i++)
  15. {
  16. printf("%d.Name, group and 5 marks: ", i+1);
  17. scanf("%s%d", stud[i].name, &stud[i].group);
  18. for (int j = 0; j < N; j++)
  19. {
  20. scanf("%d", &stud[i].mark[j]);
  21. }
  22. }
  23. float arr[N];
  24. for (int i = 0; i < N; i++)
  25. {
  26. for (int j = 0; j < N; j++)
  27. {
  28. arr[i]+=stud[i].mark[j];
  29. }
  30. arr[i]/=5;
  31. }
  32. Hoar_sort(stud, arr, 0, 4);
  33. printf("\nInfo:");
  34. for(int i = 0; i < N; i++)
  35. {
  36. printf("\n%d.%s, %i, ", i+1, stud[i].name, stud[i].group);
  37. for(int j = 0; j < N; j++)
  38. {
  39. printf("%d ",stud[i].mark[j]);
  40. }
  41. }
  42. printf("\n Students with mark 4 and 5:");
  43. for(int i = 0; i < N; i++)
  44. {
  45. for(int j = 0; j < N;j++)
  46. {
  47. if(stud[i].mark[j] == 4 || stud[i].mark[j] == 5)
  48. {
  49. printf("\n %s %i ", stud[i].name, stud[i].group);
  50. break;
  51. }
  52. }
  53. }
  54. return 0;
  55. }
  56. void Hoar_sort(struct STUDENT stud[N], float* arr, int l,int r)
  57. {
  58. int i=l, j=r;
  59. struct STUDENT d;
  60. float e;
  61. float m=arr[(l+r)/2];
  62. while(i <= j)
  63. {
  64. for(; arr[i] < m; i++);
  65. for(; arr[j] > m; j--);
  66. if(i<=j)
  67. {
  68. e = arr[i];
  69. arr[i++] = arr[j];
  70. arr[j--] = e;
  71. d = stud[i];
  72. stud[i++] = stud[j];
  73. stud[j--] = d;
  74. }
  75. }
  76. if(l < j) Hoar_sort(stud, arr, l,j);
  77. if(i < r) Hoar_sort(stud, arr, i,r);
  78. }
Результат для наглядности в фотке)

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

textual
Листинг программы
  1. e = arr[i];
  2. arr[i++] = arr[j];
  3. arr[j--] = e;
  4.  
  5. d = stud[i];
  6. stud[i++] = stud[j];
  7. stud[j--] = d;

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

  1. e = arr[i]; Переменная e получает значение элемента массива arr с индексом i.
  2. arr[i++] = arr[j]; Элемент массива arr с индексом j заменяется на значение элемента массива arr с индексом i, и i увеличивается на 1.
  3. arr[j--] = e; Элемент массива arr с индексом j заменяется на значение переменной e, и j уменьшается на 1.
  4. d = stud[i]; Переменная d получает значение элемента массива stud с индексом i.
  5. stud[i++] = stud[j]; Элемент массива stud с индексом j заменяется на значение элемента массива stud с индексом i, и i увеличивается на 1.
  6. stud[j--] = d; Элемент массива stud с индексом j заменяется на значение переменной d, и j уменьшается на 1.

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


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

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

12   голосов , оценка 3.75 из 5

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

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

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