Нужно сортировать рандомно сгенерированные числа через очередь. Т.е рандомные числа заносятся в очередь, потом сортировка по 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);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Я новичок в плюсахВводится количество вершин многоугольника
Помогите, пожалуйста, создать программу на базе с++Разбираюсь второй день - уже голова от этих матриц болит
Задача: Составить алгоритм увеличения всех трех, введённых с клавиатуры, переменных на 5,если среди них есть хотя бы две равныеВ противном...
У меня есть последовательность чисел, которая разбивается на строкиКол-во строк зависит от кол-ва чисел(выбирается рандомно в диапазоне...