Я пишу программу на C ++, которая подсчитывает сравнения чисел в быстрой сортировке с различными вариантами опорных точек. Входной текстовый файл содержит 10000 строк целых чисел от 1 до 10000. Все мои типы данных находятся в пределах досягаемости. Программа работает, когда я ввожу только первые 7 000 строк текстового файла, но если их больше 8 000, я получаю это сообщение: [Готово] завершено с кодом = 3221225725 через 1,25 секунды. Я переполняю стек? Может кто-нибудь объяснить, почему я получаю это переполнение стека / памяти с вводом> 8000 целых чисел? Спасибо!
#include<array>
#include<fstream>
#include<vector>
#include<cstdlib>
#include<iostream>
using namespace std;
vector<int> partition(vector<int> vec, int l, int r, int pivot, unsigned int& count){
count += r-l;
int i = l+1;
int temp;
for(int j = l+1; j<=r; j++){
if(vec[j] <= pivot){
temp = vec[j];
vec[j] = vec[i];
vec[i] =temp;
i++;
}
}
//swap first element at l and i-1
int t = vec[l];
vec[l] = vec[i-1];
vec[i-1] = t;
return vec;
}
vector<int> sort(vector<int> arr, int l, int r, unsigned int& count){
if(r == l+1 || r==l || r == l-1){
return arr;
}
//pivot choices: (1) first (2) last (3) median
int pivot = l;
// int pivot = r;
// int pivot = (l+r)/2;
int temp = arr[pivot];
arr[pivot] = arr[l];
arr[l] = temp;
arr = partition(arr, l, r, arr[pivot], count);
arr = sort(arr, l, pivot-1, count);
arr = sort(arr, pivot+1, r, count);
return arr;
}
int main(){
unsigned int count = 0;
vector<int> arr;
int x;
ifstream infile("QuickSort.txt");
//8000+ causes error
for(int i=0; i<8000; i++){
infile >>x;
arr.push_back(x);
}
sort(arr, 0, arr.size()-1, count);
cout << "Number of comparisons is " << count;
return 0;
}