Почему мой код C ++ для быстрой сортировки завершается с code = 3221225725? - PullRequest
1 голос
/ 10 апреля 2020

Я пишу программу на 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;
}
...