好的,我的整个程序如下所示。出于某种原因,当分区函数被调用时,它会抛出堆栈溢出错误。我倾倒了代码并寻求帮助。你很好的程序员是我最后的希望。其他一切工作正常,或至少它需要。如果你能看到Quicksort和分区功能,并看看能否弄清楚我在哪里搞砸了,我将不胜感激。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