Advertisement
anticlown

Задача про 3 цвета(о голландском флаге)

Dec 5th, 2023
1,189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.15 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <locale.h>
  6. #include <malloc.h>
  7. #include <stdbool.h>
  8.  
  9. void swap(int* a, int* b);
  10. enum colors { eRed = 0, eWhite = 1, eBlue = 2 };
  11. char* colorNames[] = {
  12.     "Кр",
  13.     "Бел",
  14.     "Син",
  15. };
  16.  
  17. /*  task methods start  */
  18. void dutchFlagSort(enum colors inpArr[], int arrSize)
  19. {
  20.     int low = 0;
  21.     int high = arrSize - 1;
  22.     int middle = 0;
  23.     while (middle <= high) {
  24.         switch (inpArr[middle]) {
  25.             case 0:
  26.                 swap(&inpArr[low++], &inpArr[middle++]);
  27.                 break;
  28.             case 1:
  29.                 middle++;
  30.                 break;
  31.             case 2:
  32.                 swap(&inpArr[middle], &inpArr[high--]);
  33.                 break;
  34.         }
  35.     }
  36. }
  37.  
  38. void swap(int* a, int* b)
  39. {
  40.     int temp = *a;
  41.     *a = *b;
  42.     *b = temp;
  43. }
  44. /*  task methods end  */
  45.  
  46. /*      print procs start      */
  47. void printTaskInfo() {
  48.     printf("\tДанная программа решает следующую задачу:\n");
  49.     printf("В каждой лунке лежит красный, белый или синий шар. Одним ходом разрешается менять местами два любых шара.\nДобиться того, чтобы все красные шары шли первыми, все синие - последними, а белые - посередине.\n");
  50. }
  51.  
  52. void printArray(int arr[], int arr_size)
  53. {
  54.     for (int i = 0; i < arr_size; i++)
  55.         printf("%s ", colorNames[arr[i]]);
  56. }
  57. /*      print procs end      */
  58.  
  59. int main()
  60. {
  61.     setlocale(LC_ALL, "Rus");
  62.     printTaskInfo();
  63.  
  64.     enum colors inputArr[] = { eRed, eBlue, eWhite, eRed, eWhite, eBlue,eRed,eRed, eBlue, eBlue, eWhite, eWhite, eBlue };
  65.     int arrSize = sizeof(inputArr) / sizeof(inputArr[0]);
  66.  
  67.     printf("\nРасположение шаров до сортировки:\n");
  68.     printArray(inputArr, arrSize);
  69.     dutchFlagSort(inputArr, arrSize);
  70.     printf("\n\nРасположение шаров после сортировки:\n");
  71.     printArray(inputArr, arrSize);
  72.  
  73.     getch();
  74.     return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement