【发布时间】:2014-12-07 15:47:27
【问题描述】:
我正在尝试从我的教科书中提供的伪代码中“翻译”这个算法。我的程序一直在崩溃,我不确定我的实现哪里出了问题。这是图像中的伪代码,下面是我的代码:
int kSmallFirst (int k, int anArray[], int first, int last) {
int pivotIndex = 0;
if (k < pivotIndex - first + 1)
return kSmallFirst(k, anArray, first, pivotIndex - 1);
else if (k == pivotIndex - first + 1)
return pivotIndex;
else
return kSmallFirst(k - (pivotIndex - first + 1), anArray, pivotIndex + 1, last);
}
int main () {
int i = 0;
int arr[512];
fstream data;
data.open("data.txt");
while (!data.eof()) {
data >> arr[i];
i++;
}
data.close();
cout << kSmallFirst(42, arr, 0, i-1);
return 0;
}
非常感谢!
【问题讨论】:
-
这里有一个想法:将排序和输入分开并分别进行测试。这可能会为您提供一些有用的信息。
-
首先,有一个叫做调试器的新发明,在请其他人为您调试代码之前,您可能应该尝试一下。其次,如果您确实要求其他人这样做,您至少可以提供有关崩溃的一些详细信息,例如错误消息是什么,哪一行等。
-
即使我能够对您的代码进行修改,我也无法真正调试它,因为您的输入来自一个文件,而我很难猜测其中的内容文件。
-
打印出
k、first和last的值,用于多次递归调用kSmallFirst并将它们发布在这里。
标签: c++ arrays algorithm recursion partition