Шейкерная сортировка (переделать графику) - C (СИ)

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

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

Всем привет! Есть код на пузырьковую сортировку с графической интерпретацией. Написал код для шейкерной сортировки, теперь нужно запихнуть туда графику с пузырьковой. Кто может помочь? Пузырек:
Листинг программы
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <conio.h>
  5. #include <time.h>
  6. #include <locale.h>
  7. #include <string.h>
  8. #include <Windows.h>
  9. const int N = 10;
  10. void printArray(int arr[], int size, int begin, int action, int sleep) {
  11. system("cls");
  12. printf("Сгенерированный массив: \n");
  13. HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
  14. int color;
  15. if (action == 1) {
  16. color = BACKGROUND_GREEN | 200 | BACKGROUND_RED | 200 | BACKGROUND_BLUE | 200;
  17. }
  18. else if (action == 2) {
  19. color = BACKGROUND_GREEN | 200 | BACKGROUND_RED | 200 | BACKGROUND_BLUE | 200 | FOREGROUND_GREEN | 200;
  20. }
  21. else if (action == 3) {
  22. color = BACKGROUND_GREEN | 200 | BACKGROUND_RED | 200 | BACKGROUND_BLUE | 200 | FOREGROUND_RED | 200;
  23. }
  24. for (int i = 0; i < size; i++) {
  25. if (i == begin || i == begin - 1) {
  26. SetConsoleTextAttribute(out, color);
  27. printf(" <%d>", arr[i]);
  28. SetConsoleTextAttribute(out, DEFAULT_PALETTE);
  29. }
  30. else {
  31. printf("%d ", arr[i]);
  32. }
  33. }
  34. Sleep(sleep);
  35. }
  36. void main() {
  37. setlocale(LC_ALL, "Russian");
  38. int A[N] = {};
  39. int sleep;
  40. printf("Введите скорость выполнения программы в мс: ");
  41. scanf("%i", &sleep);
  42. srand(time(NULL));
  43. for (int i = 0; i < N; i++) {
  44. A[i] = rand() % 2001 - 1000;
  45. }
  46. int G[N] = {};
  47. for (int i = 0; i < 10; i++)
  48. G[i] = A[i];
  49. for (int i = 0; i < N - 1; i++)
  50. for (int j = N - 2, c; j >= i; j--) {
  51. printArray(A, N, j + 1, 1, sleep);
  52. if (A[j] > A[j + 1]) {
  53. printArray(A, N, j + 1, 3, sleep);
  54. c = A[j];
  55. A[j] = A[j + 1];
  56. A[j + 1] = c;
  57. printArray(A, N, j + 1, 2, sleep);
  58. }
  59. else {
  60. printArray(A, N, j + 1, 2, sleep);
  61. }
  62. }
  63. system("cls");
  64. printf("Сгенерированный массив: \n");
  65. for (int i = 0; i < N; i++)
  66. printf("%d ", G[i]);
  67. printf("\n\nОтсортированный массив: \n");
  68. for (int i = 0; i < N; i++)
  69. printf("%d ", A[i]);
  70. printf("\n\nДля продолжения нажмите любую клавишу ...");
  71. _getch();
  72. }
Шейкер:
Листинг программы
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <conio.h>
  5. #include <locale.h>
  6. #include <string.h>
  7. const int N = 8;
  8. void Swap(int *mas, int i) {
  9. int c;
  10. c = mas[i];
  11. mas[i] = mas[i - 1];
  12. mas[i - 1] = c;
  13. }
  14. void ShakerSorting(int *mas, int Start, int N, int sleep) {
  15. int Left, Right, i;
  16. Left = Start;
  17. Right = N - 1;
  18. while (Left <= Right) {
  19. for (i = Right; i >= Left; i--)
  20. if (mas[i - 1] > mas[i])
  21. Swap(mas, i);
  22. Left++;
  23. for (i = Left; i <= Right; i++)
  24. if (mas[i] > mas[i + 1])
  25. Swap(mas, i);
  26. Right--;
  27. }
  28. }
  29. void main() {
  30. setlocale(LC_ALL, "Russian");
  31. int sleep;
  32. printf("Введите скорость выполнения программы в мс: ");
  33. scanf("%i", &sleep);
  34. int mas[]{ 45, 2, 34, 21, 24, 12, 0, 69 };
  35. int G[N] = {};
  36. for (int i = 0; i < N; i++)
  37. G[i] = mas[i];
  38. for (int i = 0; i < N; i++)
  39. ShakerSorting(mas, 1, N, sleep);
  40. system("cls");
  41. printf("Сгенерированный массив: \n");
  42. for (int i = 0; i < N; i++)
  43. printf("%d ", G[i]);
  44. printf("\n\nОтсортированный массив: \n");
  45. for (int i = 0; i < N; i++)
  46. printf("%d ", mas[i]);
  47. printf("\n\nДля продолжения нажмите любую клавишу ...");
  48. _getch();
  49. }

Решение задачи: «Шейкерная сортировка (переделать графику)»

textual
Листинг программы
  1. const int N = 10;
  2.  
  3. void printArray(int arr[], int size, int begin, int action, int sleep) {
  4.     system("cls");
  5.     printf("Сгенерированный массив: \n");
  6.     HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
  7.     int color;
  8.     if (action == 1) {
  9.         color = BACKGROUND_GREEN | 200 | BACKGROUND_RED | 200 | BACKGROUND_BLUE | 200;
  10.     }
  11.     else if (action == 2) {
  12.         color = BACKGROUND_GREEN | 200 | BACKGROUND_RED | 200 | BACKGROUND_BLUE | 200 | FOREGROUND_GREEN | 200;
  13.     }
  14.     else if (action == 3) {
  15.         color = BACKGROUND_GREEN | 200 | BACKGROUND_RED | 200 | BACKGROUND_BLUE | 200 | FOREGROUND_RED | 200;
  16.     }
  17.     for (int i = 0; i < size; i++) {
  18.         if (i == begin || i == begin - 1) {
  19.             SetConsoleTextAttribute(out, color);
  20.             printf_s(" <%d>", arr[i]);
  21.             SetConsoleTextAttribute(out, DEFAULT_PALETTE);
  22.         }
  23.         else {
  24.             printf("%d ", arr[i]);
  25.         }
  26.     }
  27.     Sleep(sleep);
  28. }
  29.  
  30. void shakerSort(int array[], int size, int sleep) {
  31.     for (int i = 0; i < size / 2; i++) {
  32.         bool swapped = false;
  33.         for (int j = i; j < size - i - 1; j++) {
  34.             printArray(array, N, j + 1, 1, sleep);
  35.             if (array[j] < array[j + 1]) {
  36.                 printArray(array, N, j + 1, 3, sleep);
  37.                 int tmp = array[j];
  38.                 array[j] = array[j + 1];
  39.                 array[j + 1] = tmp;
  40.                 printArray(array, N, j + 1, 2, sleep);
  41.                 swapped = true;
  42.             }
  43.         }
  44.         for (int j = size - 2 - i; j > i; j--) {
  45.             printArray(array, N, j + 1, 1, sleep);
  46.             if (array[j] > array[j - 1]) {
  47.                 int tmp = array[j];
  48.                 printArray(array, N, j, 3, sleep);
  49.                 array[j] = array[j - 1];
  50.                 array[j - 1] = tmp;
  51.                 printArray(array, N, j, 2, sleep);
  52.                 swapped = true;
  53.             }
  54.         }
  55.         if (!swapped) break;
  56.     }
  57. }
  58.  
  59. void main() {
  60.     setlocale(LC_ALL, "Russian");
  61.     int A[N] = {};
  62.     int sleep;
  63.     printf("Введите скорость выполнения программы в мс: ");
  64.     scanf_s("%i", &sleep);
  65.     srand(time(NULL));
  66.     for (int i = 0; i < N; i++) {
  67.         A[i] = rand() % 2001 - 1000;
  68.     }
  69.     int G[N];
  70.     for (int i = 0; i < 10; i++)
  71.         G[i] = A[i];
  72.  
  73.     shakerSort(A, N, sleep);
  74.     system("cls");
  75.     printf("Сгенерированный массив: \n");
  76.     for (int i = 0; i < N; i++)
  77.         printf("%d ", G[i]);
  78.     printf("\n\nОтсортированный массив: \n");
  79.     for (int i = 0; i < N; i++)
  80.         printf("%d ", A[i]);
  81.     printf("\n\nДля продолжения нажмите любую клавишу ...");
  82.     _getch();
  83. }

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

  1. Объявлена константа N равная 10.
  2. Функция printArray() выводит массив на экран, используя функцию printf() и функцию SetConsoleTextAttribute() для установки цвета текста и фона.
  3. Функция shakerSort() реализует алгоритм сортировки Шейкера, который является модификацией алгоритма сортировки вставками. Алгоритм разделяет массив на две части, затем сортирует каждую часть отдельно, затем объединяет их.
  4. В функции main() задается вопрос пользователю о скорости выполнения программы, затем программа генерирует случайный массив A и копирует его в массив G.
  5. Вызывается функция shakerSort() для сортировки массива A.
  6. Выводится отсортированный массив A.
  7. Выводится сообщение Для продолжения нажмите любую клавишу ... и вызывается функция _getch() для приостановки выполнения программы до нажатия клавиши.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

14   голосов , оценка 4.286 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы