Переполнение памяти С++
При вводе, например, 500 элементов все работает хорошо. Если ввожу больше, например, 5000, то вылетает с ошибкой. Как это можно исправить?
#include <iostream>
#include <cstdlib>
#include <time.h>
#include <string>
#include <cmath>
#include <chrono>
#include <iomanip>
#include <vector>
using namespace std;
//функция отвечает за случайную генерацию вещественных чисел в промежутке от LO до HI
float random(int LO, int HI)
{
return LO + static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / (HI - LO)));
}
/////////////////////////////////////////////////////////////////////////////////////
//Функция заполняет массив рандомными элементами типа float
void FloatRandom(float* array, int ArrayCount, int a, int b)
{
for (int i = 0; i < ArrayCount; i++)
{
array[i] = random(a, b);
}
}
////////////////////////////////////////////////////////////
void QuickSort(float* numbers, int left, int right)
{
int l_hold = left, r_hold = right; //левая и правая границы
int n = 0;
float average = 0; // среднее арифметическое
for (int i = l_hold; i <= r_hold; i++) { // суммируешь весь массив и ищешь кол-во элементов
average += numbers[i];
n++;
}
average /= n; // подсчет среднего арифметического
// цикл нахождения и перестановки подходящих элементов
do {
while (numbers[l_hold] > average)
l_hold++;
while (numbers[r_hold] < average)
r_hold--;
if (l_hold <= r_hold) {
float temp;
temp = numbers[l_hold];
numbers[l_hold] = numbers[r_hold];
numbers[r_hold] = temp;
l_hold++;
r_hold--;
}
} while (l_hold <= r_hold);
if (l_hold < right)
QuickSort(numbers, l_hold, right);
if (left < r_hold)
QuickSort(numbers, left, r_hold);
}
int ArrayCount; //количество элементов массивов
float* array1;
float* array2;
float* array3;
int main()
{
setlocale(LC_ALL, "russian");
srand(time(NULL));
cin >> ArrayCount;
for (int loop = 0; loop < 10; loop++)
{
array1 = new float[ArrayCount];
array2 = new float[ArrayCount];
array3 = new float[ArrayCount];
//Рандомное заполнение массивов числами типа float в промежутке [0,10];
FloatRandom(array1, ArrayCount, 0, 10);
for (int i = 0; i < ArrayCount; i++)
{
array2[i] = array1[i];
array3[i] = array1[i];
}
//////////////////////////////////////////////////////////////////////
QuickSort(array3, 0, ArrayCount - 1);
delete[]array1;
delete[]array2;
delete[]array3;
//////////////////////////////////////////////////////////////////////
}
system("pause");
return 0;
}
