问题描述
我正在制作逐步显示各种排序算法的程序。为此,每个算法都有自己的类和只执行一次交换的 nextStep 方法。问题是系统的实现允许从它以上一个 nextStep 调用结束的同一位置恢复排序。我试图通过使用 if 语句来解决这个问题,但没有成功。我发现的唯一工作方法是转到。我正在寻找如何在不使用它的情况下解决此问题的任何提示。
class QuickSort
{
int r;
int l;
int i;
int j;
int top;
int p;
bool swap = true;
int x;
int recoveryController;
std::vector<int> stack = std::vector<int>(1);
public:
QuickSort(std::vector<int> numbers);
void nextStep(std::vector<int> &numbers);
};
QuickSort::QuickSort(std::vector<int> numbers) {
l = 0;
r = numbers.size()-1;
stack.resize((r - l + 2));
top = -1;
stack[++top] = l;
stack[++top] = r;
recoveryController = 0;
}
void QuickSort::nextStep(std::vector<int>& numbers)
{
switch (recoveryController) {
case 1:
recoveryController = 0;
goto return1;
break;
case 2:
recoveryController = 0;
goto return2;
break;
}
while (top >= 0) {
r = stack[top--];
l = stack[top--];
x = numbers[r];
i = (l - 1);
j = l;
for (j; j <= r - 1; j++) {
if (numbers[j] <= x) {
i++;
if (i != j) {
//Custom swap function
swapData(numbers[i],numbers[j]);
recoveryController = 1;
return;
return1:
swap = false;
}
}
}
if (i + 1 != r) {
//Custom swap function
swapData(numbers[i + 1],numbers[r]);
recoveryController = 2;
return;
return2:
swap = false;
}
p=i + 1;
if (p - 1 > l) {
stack[++top] = l;
stack[++top] = p - 1;
}
if (p + 1 < r) {
stack[++top] = p + 1;
stack[++top] = r;
}
if (swap)
{
return;
}
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)