Задача 4
Задание
К задаче 1 добавить сортировку по любому выбранному полю.
Неформализованное описание алгоритма
1)Создаем 2 строки длиной равной длине полей в структуре.
2)По методу пузырька через два цикла сортируем по нужному полю.
Код программы на языке СИ
БСА
| Программа на СИ
|
| #include "string.h"
void sort_records(record mas[], int k, int top)
{
char str1[30], str2[30];
for (int j = 0; j < top - 1; j++) {
for (int i = 0; i < top - j - 1; i++) {
if (k == 1) {
*str1 = *mas[i].family;
*str2 = *mas[i + 1].family;
}
else if (k == 2) {
*str1 = *mas[i].name;
*str2 = *mas[i + 1].name;
}
else if (k == 3) {
*str1 = *mas[i].surname;
*str2 = *mas[i + 1].surname;
}
if (strcmp(str1, str2)>0) {
struct record b;
b.number = mas[i].number;
*b.family = *mas[i].family;
*b.name = *mas[i].name;
*b.surname = *mas[i].surname;
*b.phone = *mas[i].phone;
mas[i].number = mas[i + 1].number;
*mas[i].family = *mas[i + 1].family;
*mas[i].name = *mas[i + 1].name;
*mas[i].surname = *mas[i + 1].surname;
*mas[i].phone = *mas[i + 1].phone;
mas[i + 1].number = b.number;
*mas[i + 1].family = *b.family;
*mas[i + 1].name = *b.name;
*mas[i + 1].surname = *b.surname;
*mas[i + 1].phone = *b.phone;
}
}
}
}
Вызов в main:
if (action == 4)
{
printf("Введите 1 для сортировки по фамилии,2 по имени,3 по отчеству.\n");
scanf_s("%i", &k);
sort_records(mas, k, top);
}
|