Шейкерная сортировка (переделать графику) - C (СИ)
Формулировка задачи:
Всем привет! Есть код на пузырьковую сортировку с графической интерпретацией. Написал код для шейкерной сортировки, теперь нужно запихнуть туда графику с пузырьковой. Кто может помочь?
Пузырек:
Шейкер:
Листинг программы
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <time.h>
- #include <locale.h>
- #include <string.h>
- #include <Windows.h>
- const int N = 10;
- void printArray(int arr[], int size, int begin, int action, int sleep) {
- system("cls");
- printf("Сгенерированный массив: \n");
- HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
- int color;
- if (action == 1) {
- color = BACKGROUND_GREEN | 200 | BACKGROUND_RED | 200 | BACKGROUND_BLUE | 200;
- }
- else if (action == 2) {
- color = BACKGROUND_GREEN | 200 | BACKGROUND_RED | 200 | BACKGROUND_BLUE | 200 | FOREGROUND_GREEN | 200;
- }
- else if (action == 3) {
- color = BACKGROUND_GREEN | 200 | BACKGROUND_RED | 200 | BACKGROUND_BLUE | 200 | FOREGROUND_RED | 200;
- }
- for (int i = 0; i < size; i++) {
- if (i == begin || i == begin - 1) {
- SetConsoleTextAttribute(out, color);
- printf(" <%d>", arr[i]);
- SetConsoleTextAttribute(out, DEFAULT_PALETTE);
- }
- else {
- printf("%d ", arr[i]);
- }
- }
- Sleep(sleep);
- }
- void main() {
- setlocale(LC_ALL, "Russian");
- int A[N] = {};
- int sleep;
- printf("Введите скорость выполнения программы в мс: ");
- scanf("%i", &sleep);
- srand(time(NULL));
- for (int i = 0; i < N; i++) {
- A[i] = rand() % 2001 - 1000;
- }
- int G[N] = {};
- for (int i = 0; i < 10; i++)
- G[i] = A[i];
- for (int i = 0; i < N - 1; i++)
- for (int j = N - 2, c; j >= i; j--) {
- printArray(A, N, j + 1, 1, sleep);
- if (A[j] > A[j + 1]) {
- printArray(A, N, j + 1, 3, sleep);
- c = A[j];
- A[j] = A[j + 1];
- A[j + 1] = c;
- printArray(A, N, j + 1, 2, sleep);
- }
- else {
- printArray(A, N, j + 1, 2, sleep);
- }
- }
- system("cls");
- printf("Сгенерированный массив: \n");
- for (int i = 0; i < N; i++)
- printf("%d ", G[i]);
- printf("\n\nОтсортированный массив: \n");
- for (int i = 0; i < N; i++)
- printf("%d ", A[i]);
- printf("\n\nДля продолжения нажмите любую клавишу ...");
- _getch();
- }
Листинг программы
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <locale.h>
- #include <string.h>
- const int N = 8;
- void Swap(int *mas, int i) {
- int c;
- c = mas[i];
- mas[i] = mas[i - 1];
- mas[i - 1] = c;
- }
- void ShakerSorting(int *mas, int Start, int N, int sleep) {
- int Left, Right, i;
- Left = Start;
- Right = N - 1;
- while (Left <= Right) {
- for (i = Right; i >= Left; i--)
- if (mas[i - 1] > mas[i])
- Swap(mas, i);
- Left++;
- for (i = Left; i <= Right; i++)
- if (mas[i] > mas[i + 1])
- Swap(mas, i);
- Right--;
- }
- }
- void main() {
- setlocale(LC_ALL, "Russian");
- int sleep;
- printf("Введите скорость выполнения программы в мс: ");
- scanf("%i", &sleep);
- int mas[]{ 45, 2, 34, 21, 24, 12, 0, 69 };
- int G[N] = {};
- for (int i = 0; i < N; i++)
- G[i] = mas[i];
- for (int i = 0; i < N; i++)
- ShakerSorting(mas, 1, N, sleep);
- system("cls");
- printf("Сгенерированный массив: \n");
- for (int i = 0; i < N; i++)
- printf("%d ", G[i]);
- printf("\n\nОтсортированный массив: \n");
- for (int i = 0; i < N; i++)
- printf("%d ", mas[i]);
- printf("\n\nДля продолжения нажмите любую клавишу ...");
- _getch();
- }
Решение задачи: «Шейкерная сортировка (переделать графику)»
textual
Листинг программы
- const int N = 10;
- void printArray(int arr[], int size, int begin, int action, int sleep) {
- system("cls");
- printf("Сгенерированный массив: \n");
- HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
- int color;
- if (action == 1) {
- color = BACKGROUND_GREEN | 200 | BACKGROUND_RED | 200 | BACKGROUND_BLUE | 200;
- }
- else if (action == 2) {
- color = BACKGROUND_GREEN | 200 | BACKGROUND_RED | 200 | BACKGROUND_BLUE | 200 | FOREGROUND_GREEN | 200;
- }
- else if (action == 3) {
- color = BACKGROUND_GREEN | 200 | BACKGROUND_RED | 200 | BACKGROUND_BLUE | 200 | FOREGROUND_RED | 200;
- }
- for (int i = 0; i < size; i++) {
- if (i == begin || i == begin - 1) {
- SetConsoleTextAttribute(out, color);
- printf_s(" <%d>", arr[i]);
- SetConsoleTextAttribute(out, DEFAULT_PALETTE);
- }
- else {
- printf("%d ", arr[i]);
- }
- }
- Sleep(sleep);
- }
- void shakerSort(int array[], int size, int sleep) {
- for (int i = 0; i < size / 2; i++) {
- bool swapped = false;
- for (int j = i; j < size - i - 1; j++) {
- printArray(array, N, j + 1, 1, sleep);
- if (array[j] < array[j + 1]) {
- printArray(array, N, j + 1, 3, sleep);
- int tmp = array[j];
- array[j] = array[j + 1];
- array[j + 1] = tmp;
- printArray(array, N, j + 1, 2, sleep);
- swapped = true;
- }
- }
- for (int j = size - 2 - i; j > i; j--) {
- printArray(array, N, j + 1, 1, sleep);
- if (array[j] > array[j - 1]) {
- int tmp = array[j];
- printArray(array, N, j, 3, sleep);
- array[j] = array[j - 1];
- array[j - 1] = tmp;
- printArray(array, N, j, 2, sleep);
- swapped = true;
- }
- }
- if (!swapped) break;
- }
- }
- void main() {
- setlocale(LC_ALL, "Russian");
- int A[N] = {};
- int sleep;
- printf("Введите скорость выполнения программы в мс: ");
- scanf_s("%i", &sleep);
- srand(time(NULL));
- for (int i = 0; i < N; i++) {
- A[i] = rand() % 2001 - 1000;
- }
- int G[N];
- for (int i = 0; i < 10; i++)
- G[i] = A[i];
- shakerSort(A, N, sleep);
- system("cls");
- printf("Сгенерированный массив: \n");
- for (int i = 0; i < N; i++)
- printf("%d ", G[i]);
- printf("\n\nОтсортированный массив: \n");
- for (int i = 0; i < N; i++)
- printf("%d ", A[i]);
- printf("\n\nДля продолжения нажмите любую клавишу ...");
- _getch();
- }
Объяснение кода листинга программы
- Объявлена константа N равная 10.
- Функция printArray() выводит массив на экран, используя функцию printf() и функцию SetConsoleTextAttribute() для установки цвета текста и фона.
- Функция shakerSort() реализует алгоритм сортировки Шейкера, который является модификацией алгоритма сортировки вставками. Алгоритм разделяет массив на две части, затем сортирует каждую часть отдельно, затем объединяет их.
- В функции main() задается вопрос пользователю о скорости выполнения программы, затем программа генерирует случайный массив A и копирует его в массив G.
- Вызывается функция shakerSort() для сортировки массива A.
- Выводится отсортированный массив A.
- Выводится сообщение
Для продолжения нажмите любую клавишу ...
и вызывается функция _getch() для приостановки выполнения программы до нажатия клавиши.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д