#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <locale.h>
void shakerSort(int* arr, int size) {
int left = 0;
int right = size - 1;
while (left < right) {
for (int i = left; i < right; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
right--;
for (int i = right; i > left; i--) {
if (arr[i - 1] > arr[i]) {
int temp = arr[i];
arr[i] = arr[i - 1];
arr[i - 1] = temp;
}
}
left++;
}
}
void printArray(int* arr, int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
setlocale(LC_ALL, "Russian");
srand(time(NULL));
int choice;
do {
printf("Выберите способ ввода:\n");
printf("1 - Ручной ввод\n");
printf("2 - Генерация случайных чисел\n");
printf("3 - Чтение из файла\n");
printf("0 - Выход\n");
printf("Выбор: ");
scanf("%d", &choice);
if (choice == 0) {
printf("Завершение работы программы.\n");
break;
}
int mySize;
printf("Введите количество элементов: ");
scanf("%d", &mySize);
int* myArray = (int*)malloc(mySize * sizeof(int));
if (choice == 1) {
printf("Введите элементы через пробел:\n");
for (int i = 0; i < mySize; i++) {
scanf("%d", &myArray[i]);
}
}
else if (choice == 2) {
for (int i = 0; i < mySize; i++) {
myArray[i] = rand() % 100;
}
printf("Сгенерированный массив:\n");
printArray(myArray, mySize);
}
else if (choice == 3) {
char filename[100];
printf("Введите имя файла: ");
scanf("%s", filename);
FILE* file = fopen(filename, "r");
if (file == NULL) {
printf("Ошибка открытия файла!\n");
free(myArray);
continue;
}
for (int i = 0; i < mySize; i++) {
fscanf(file, "%d", &myArray[i]);
}
fclose(file);
}
else {
printf("Неверный выбор!\n");
free(myArray);
continue;
}
printf("\nВаш набор данных:\n");
printArray(myArray, mySize);
shakerSort(myArray, mySize);
printf("После сортировки:\n");
printArray(myArray, mySize);
printf("\n");
free(myArray);
} while (1);
return 0;
}