Отсортировать массив структур простыми вставками - C (СИ)

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

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

Нужно отсортировать массив структур простыми вставками...Ключ сортировки Population, ничего не получается помогите кто-нибудь
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h>
 
struct Struct
{ 
    char Audition[10];
    char Population[10];
} ;
Struct* insertSort(Struct* a, int size) ;
 
    void main()
    {
int n, i, j;
    printf("Enter number of Auditions\n");
    struct Struct sort[10];
    for (i = 1; i < 4; ++i){
        printf("Enter the Audition\n");
        scanf("%s",sort[i].Audition);
        printf("Enter the Population\n");
        scanf("%s",sort[i].Population);
    }
 
insertSort(sort, 10);
for (i = 1; i < 4; ++i){
printf("%s",sort[i]);
}
}
 
    Struct* insertSort(Struct* a, int size) 
{
    int i, j;
    char* tmp;
    for (i = 1; i < 4; ++i) // цикл проходов, i - номер прохода
    {
        tmp = a[i].Audition; 
        for (j = i - 1; j >= 0 && a[j].Audition > tmp; --j) // поиск места элемента в готовой последовательности 
            a[j + 1] = a[j];    // сдвигаем элемент направо, пока не дошли
         a[j + 1] = tmp;
        return(a);    
    }
}

Решение задачи: «Отсортировать массив структур простыми вставками»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
 
typedef struct
{
   char Audition[10];
   char Population[10];
}  Struct;
 
#define N 4
 
Struct* insertSort(Struct* a, int size);
 
int main()
{
   int i;
   Struct array[N];
 
   printf("Enter number of Auditions\n");
   for (i = 0; i < N; ++i)
   {
      printf("%d. audition: ", i + 1);
      scanf("%s", array[i].Audition);
      printf("%d. population: ", i + 1);
      scanf("%s", array[i].Population);
   }
 
   insertSort(array, N);
 
   for (i = 0; i < N; ++i)
   {
      printf("%s %s\n", array[i].Audition, array[i].Population);
   }
 
   return 0;
}
 
Struct* insertSort(Struct* a, int size)
{
   int i, j;
   Struct tmp;
   for (i = 1; i < size; ++i)
   {
      for (j = i; (j > 0) && (strcmp(a[j].Population, a[j-1].Population) < 0); --j)
      {
         tmp = a[j];
         a[j] = a[j-1];
         a[j-1] = tmp;
      }
   }
 
   return a;
}

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

  1. Включаем необходимые заголовочные файлы и
  2. Определяем структуру Struct, которая содержит два поля типа char - Audition и Population, каждое из которых имеет размер 10 символов
  3. Определяем константу N, которая задает размер массива структур Struct в main()
  4. Объявляем функцию insertSort(), которая принимает указатель на массив структур Struct и его размер
  5. В main() создаем массив структур Struct типа N и инициализируем его пустыми строками
  6. Запрашиваем у пользователя ввод количества прослушиваний и заполняем поля Audition и Population для каждой прослушивания
  7. Вызываем функцию insertSort(), передавая ей указатель на массив структур Struct и его размер
  8. Выводим отсортированный массив структур Struct на экран
  9. В функции insertSort() используем алгоритм сортировки вставками. Проходим по массиву от 1 до size-1 и для каждого элемента сравниваем его значение Population с Population предыдущего элемента. Если текущий элемент меньше предыдущего, меняем их местами с помощью временной переменной tmp. Повторяем до тех пор, пока массив не будет полностью отсортирован
  10. Возвращаем отсортированный массив структур Struct в main()
  11. Возвращаем 0 из функции main(), что означает успешное выполнение программы

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

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