Untitled

 avatar
unknown
c_cpp
2 years ago
2.7 kB
4
Indexable
#include <iostream>
#include <SFML/Graphics.hpp>
#include <vector>
#include <ctime>
#include "windows.h"

const int Width = 600, Height = 400;

sf::RenderWindow window(sf::VideoMode(Width, Height), "Sorting");

std::vector<int> randomVector(int lenght) {

    srand(time(0));

    std::vector<int> numbers;
    int random = 0;

    for (int i = 1; i < lenght + 1; i++) {
        numbers.push_back(i);
    }
    for (int i = 0; i < lenght; i++) {
        random = rand() % lenght;
        if (random != i) {
            std::swap(numbers[i], numbers[random]);
        }
    }

    return numbers;

}

void displaySorting(std::vector<int> list) {

    int len = end(list) - begin(list);
    float block = Width / len;

    std::vector<sf::RectangleShape> rect(len);

    window.clear();
    for (int i = 0; i < len; i++) {
        rect[i].setSize(sf::Vector2f(block, -Height / float((len / float(list[i])))));
        rect[i].setPosition((i  * block),400);
        rect[i].setFillColor(sf::Color::White);
        window.draw(rect[i]);
    }
    window.display();

    Sleep(5);
}

void CombSort(std::vector<int> values) {
    const double factor = 1.247; // Фактор уменьшения
    double step = values.size() - 1;

    while (step >= 1) {
        for (int i = 0; i + step < values.size(); ++i) {
            if (values[i] > values[i + step]) {
                std::swap(values[i], values[i + step]);
                displaySorting(values);
            }
        }
        step /= factor;
    }
    // сортировка пузырьком
    for (size_t idx_i = 0; idx_i + 1 < values.size(); ++idx_i) {
        for (size_t idx_j = 0; idx_j + 1 < values.size() - idx_i; ++idx_j) {
            if (values[idx_j + 1] < values[idx_j]) {
                std::swap(values[idx_j], values[idx_j + 1]);
                displaySorting(values);
            }
        }
    }
}
std::vector<int> bubbleSort(std::vector<int> list) {

    int length = end(list) - begin(list);
    for (int i = 0; i < length - 1; i++)
        for (int j = 0; j < length - i - 1; j++) {
            if (list[j] > list[j + 1]) {
                std::swap(list[j], list[j + 1]);
                displaySorting(list);

            }
        }
    return list;
}


int main() {

    const int nNumbers = 100;

    

    CombSort(randomVector(nNumbers));

    while (window.isOpen()) {
        sf::Event event;
        while (window.pollEvent(event)) {
            if (event.type == sf::Event::Closed) {
                window.close();
            }
            
        }


        window.clear();

        

        window.display();
    }
}
Editor is loading...
Leave a Comment