Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- #include <locale.h>
- #include <malloc.h>
- #include <stdbool.h>
- void swap(int* a, int* b);
- enum colors { eRed = 0, eWhite = 1, eBlue = 2 };
- char* colorNames[] = {
- "Кр",
- "Бел",
- "Син",
- };
- /* task methods start */
- void dutchFlagSort(enum colors inpArr[], int arrSize)
- {
- int low = 0;
- int high = arrSize - 1;
- int middle = 0;
- while (middle <= high) {
- switch (inpArr[middle]) {
- case 0:
- swap(&inpArr[low++], &inpArr[middle++]);
- break;
- case 1:
- middle++;
- break;
- case 2:
- swap(&inpArr[middle], &inpArr[high--]);
- break;
- }
- }
- }
- void swap(int* a, int* b)
- {
- int temp = *a;
- *a = *b;
- *b = temp;
- }
- /* task methods end */
- /* print procs start */
- void printTaskInfo() {
- printf("\tДанная программа решает следующую задачу:\n");
- printf("В каждой лунке лежит красный, белый или синий шар. Одним ходом разрешается менять местами два любых шара.\nДобиться того, чтобы все красные шары шли первыми, все синие - последними, а белые - посередине.\n");
- }
- void printArray(int arr[], int arr_size)
- {
- for (int i = 0; i < arr_size; i++)
- printf("%s ", colorNames[arr[i]]);
- }
- /* print procs end */
- int main()
- {
- setlocale(LC_ALL, "Rus");
- printTaskInfo();
- enum colors inputArr[] = { eRed, eBlue, eWhite, eRed, eWhite, eBlue,eRed,eRed, eBlue, eBlue, eWhite, eWhite, eBlue };
- int arrSize = sizeof(inputArr) / sizeof(inputArr[0]);
- printf("\nРасположение шаров до сортировки:\n");
- printArray(inputArr, arrSize);
- dutchFlagSort(inputArr, arrSize);
- printf("\n\nРасположение шаров после сортировки:\n");
- printArray(inputArr, arrSize);
- getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement