Отсортировать массив структур простыми вставками - 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;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
и - Определяем структуру Struct, которая содержит два поля типа char - Audition и Population, каждое из которых имеет размер 10 символов
- Определяем константу N, которая задает размер массива структур Struct в main()
- Объявляем функцию insertSort(), которая принимает указатель на массив структур Struct и его размер
- В main() создаем массив структур Struct типа N и инициализируем его пустыми строками
- Запрашиваем у пользователя ввод количества прослушиваний и заполняем поля Audition и Population для каждой прослушивания
- Вызываем функцию insertSort(), передавая ей указатель на массив структур Struct и его размер
- Выводим отсортированный массив структур Struct на экран
- В функции insertSort() используем алгоритм сортировки вставками. Проходим по массиву от 1 до size-1 и для каждого элемента сравниваем его значение Population с Population предыдущего элемента. Если текущий элемент меньше предыдущего, меняем их местами с помощью временной переменной tmp. Повторяем до тех пор, пока массив не будет полностью отсортирован
- Возвращаем отсортированный массив структур Struct в main()
- Возвращаем 0 из функции main(), что означает успешное выполнение программы