Я делаю визуализатор сортировки в консольном приложении c ++. У меня есть алгоритм пузырьковой сортировки, работающий нормально, и он упорядочивает или сортирует вектор, полный строк, в соответствии с длиной, и вектор называется sort_visualize, а строки заполнены определенным количеством #. Каждый раз, когда производится новая сортировка или компоновка, я вызываю системную функцию («CLS»), чтобы очистить экран, а затем рисую (sort_visualize), чтобы снова нарисовать этот вектор строки. это дает эффект активной сортировки программы в режиме реального времени, когда пользователь наблюдает за ней, поскольку система («CLS»), я думаю, ограничивает скорость для каждого кадра. Теперь я хочу закрасить две сравниваемые строки в данный момент, чтобы они были окрашены в красный цвет, а затем после вызова функции рисования я сбрасываю их обратно на белый. Это в функции bubble_sort, где я размещаю комментарии о том, что я хочу, в моем коде. Как мне это реализовать? Вы можете проверить мой код, чтобы увидеть, как он работает, если хотите. Вот код:
#include <iostream>
#include <vector>
#include <ctime>
#include "stdlib.h"
#include <string>
using namespace std;
//Function Prototypes
void Sort_Selection(int size, vector <int> &num_list, vector <string> &sort_visual);
void draw(vector <string> &sort_visual);
void Randomize_Setup(vector <int> &num_list, vector <string> &sort_visual, int size);
void bubble_sort(vector <string> &sort_visual);
int main()
{
vector <string> sort_visual;
vector <int> num_list;
srand(time(NULL));
//instructions
cout << "USE FULLSCREEN FOR BEST VIEW" << endl;
cout << "Enter the amount of numbers to sort (max 40 for best visibility): " << endl;
int size;
cin >> size;
//sort selection
Sort_Selection(size, num_list, sort_visual);
}
//FUNCTIONS*****************************************************************************
void Sort_Selection(int size, vector <int> &num_list, vector <string> &sort_visual)
{
int sort_selection;
//User Sort Selection
while(sort_selection != 1)
{
//User Input and Options
cout << "What type of sort would you like to use? Enter number" << endl;
cout << "1. Bubble" << endl;
cin>>sort_selection;
//If statements of what to do
if(sort_selection == 1)
{
Randomize_Setup(num_list, sort_visual, size);
draw(sort_visual);
//Ready to start
system("pause");
bubble_sort(sort_visual);
break;
}
}
}
void Randomize_Setup(vector <int> &num_list, vector <string> &sort_visual, int size)
{
//fill the number list with random numbers
for (int i = 0; i < size; i++)
{
num_list.push_back(rand() % size);
}
//Fill the visualizer strings which will be bars with #'s depending on the numlist
for (int i = 0; i < num_list.size(); i++)
{
sort_visual.push_back("");
string temp;
for (int j = 0; j < num_list.at(i); j++)
{
temp.push_back('#');
}
sort_visual.at(i) = temp;
}
}
void draw(vector <string> &sort_visual)
{
for (int i = 0; i < sort_visual.size(); i++)
{
cout << sort_visual.at(i) << endl;
}
}
void bubble_sort(vector <string> &sort_visual)
{
//bubble sort
for (int j = 0; j < sort_visual.size(); j++)
{
for (int i = 0; i < sort_visual.size()-1; i++)
{
if (sort_visual.at(i).length() > sort_visual.at(i+1).length())
{
//I WANT TO MAKE THE TWO STRINGS BEING COMPARED , A DIFFERENT COLOUR OVER HERE I GUESS
string temp = sort_visual.at(i);
sort_visual.at(i) = sort_visual.at(i+1);
sort_visual.at(i+1) = temp;
system("CLS");
draw(sort_visual);
//THEN I RESET THE COLOURS TO NORMAL AFTER DRAWING THE BARS OUT because when the system("CLS") is called, and these exact strings are not being ompared, they should display white.
}
}
}
}