Нужно сортировать рандомно сгенерированные числа через очередь. Т.е рандомные числа заносятся в очередь, потом сортировка по 300 элементов. 1 "поток" - от 0 до 300, 2 "поток" от 300 до 600 и т.д всего 10 "потоков". Сортировка Хоару работает идеально. Получается разделить их на 300 элементов, но сортировка идет не правильно. Так же требуется подсчет времени сортировки каждого из "потоков". Голову уже сломал, информации нигде не нашел
#include <iostream>
#include <queue>
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <ctime>
#include "windows.h"
using namespace std;
void khoaraQuickSort(int* numbers, int left, int right)
{
int pivot;
int l_hold = left;
int r_hold = right;
pivot = numbers[left];
while (left < right)
{
while ((numbers[right] >= pivot) && (left < right))
right--;
if (left != right)
{
numbers[left] = numbers[right];
left++;
}
while ((numbers[left] <= pivot) && (left < right))
left++;
if (left != right)
{
numbers[right] = numbers[left];
right--;
}
}
numbers[left] = pivot;
pivot = left;
left = l_hold;
right = r_hold;
if (left < pivot)
khoaraQuickSort(numbers, left, pivot - 1);
if (right > pivot)
khoaraQuickSort(numbers, pivot + 1, right);
}
int main()
{
setlocale(LC_ALL, "Russian");
int t_s, t_f;
queue<int> NumsToSort;
srand(time(NULL));
int ToSortNumbers[3000];
int N = 300;
for (int i = 0; i < 3000; i++) {
ToSortNumbers[i] = rand() % 999;
}
for (int i = 0; i < 10; i++) {
for (int z = N - 300; z < N; z++) {
cout << ToSortNumbers[i]<<" ";
}
t_s = GetTickCount();
khoaraQuickSort(ToSortNumbers, 0, 1000 - 1);
NumsToSort.push(ToSortNumbers[i]);
t_f = GetTickCount();
cout << endl<< "Номер сортировки: " << i + 1 << " Колличество отсортированных элементов: " << N << " Время сортировки (ms): " << t_f - t_s << " Колличество операций (N_op): " << endl; // Шаг в 300 элементов
N = N + 300;
}
}
У тебя не правильно установлен индекс в строчке:
for (int z = N - 300; z < N; z++) {
cout << ToSortNumbers[i]<<" ";
}
Должно быть так:
for (int z = N - 300; z < N; z++) {
cout << ToSortNumbers[z]<<" "; // <---
}
t_f = GetTickCount();right = 1000 - 1, но у тебя 3000 элементов, а не 1000.
Правильный код: khoaraQuickSort(ToSortNumbers, 0, 3000 - 1);Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники