Итак, вся моя программа показана ниже. По какой-то причине, когда вызывается функция раздела, она бросает ошибку переполнения стека. Я вылил код и искал помощь. Вы прекрасные программисты - моя последняя надежда. Все остальное прекрасно работает или, по крайней мере, так же хорошо, как и нужно. Я был бы признателен, если бы вы могли посмотреть на Quicksort и функции раздела для меня и посмотреть, сможете ли вы выяснить, где я испортился.Ошибка быстрого переполнения стека
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <time.h>
#include <stdio.h>
#include <dos.h>
using namespace std;
vector<int> DataIn(ifstream&);
void quickSort(int, int, vector<int>&, int);
int partition(vector<int>& list, int start, int end)
{
int pivot = list[start];
int index = start;
for (int i = start + 1; i < end; i++)
{
if (list[i] <= pivot)
{
swap(list[index], list[i]);
}
}
index++;
if (index != end)
{
swap(list[index], list[start]);
}
return index;
}
void swap(int& a, int& b)
{
int temp = a;
a = b;
b = temp;
}
int main()
{
int repeat = 0;
int fileCount = 1;
while (repeat == 0)
{
int loadFail = NULL;
cout << "\nWhat is the file name: ";
string fileName;
cin >> fileName;
ifstream fileIn(fileName);
do
{
if (fileIn.fail())
{
loadFail = 1;
cout << "\nUnable to open file. Please try again:";
cout << "\nWhat is the file name: ";
cin >> fileName;
ifstream fileIn(fileName);
if (fileIn.good())
{
loadFail = 0;
}
}
else
{
loadFail = 0;
}
} while (loadFail == 1);
vector<int> fileData;
fileData = DataIn(fileIn);
int fileLength = fileData.size();
void quickTime = quickSort(0, fileLength - 1, fileData, fileCount);
return 0;
};
vector<int> DataIn(ifstream& read)
{
vector<int> data;
int dataLine;
while (!read.eof())
{
read >> dataLine;
read.ignore();
data.push_back(dataLine);
}
return data;
}
void quickSort(int begin, int end, vector<int>& list, int fileNum)
{
int mid = 0;
if (end > begin)
{
mid = partition(list, begin, end);
quickSort(begin, mid, list, fileNum);
quickSort(mid + 1, end, list, fileNum);
}
return elapsed_time;
}
У вас есть отладчик, используйте его пожалуйста! Как вы думаете, что вызов 'quickSort (begin, mid, list, fileNum),' рекурсивно изменит условия для вызова в следующей рекурсии? Он будет просто потреблять весь стек и бросать, как вы переживаете. –
Пожалуйста, укажите [** минимальный **, полный и ** проверяемый пример **] (http://www.stackoverflow.com/help/mcve). Также ваш алгоритм разбиения не выглядит правильным. Подумайте о том, что делает этот первый цикл в сравнении с тем, что он должен делать. – Barry
Хорошо, я достал кучу кода, который не нужен, чтобы быть в состоянии помочь мне. У меня все еще есть проблемы с выяснением того, что я сделал не так. Может кто-то может помочь немного больше? – Trovan