在没有 goto

问题描述

我正在制作逐步显示各种排序算法的程序。为此,每个算法都有自己的类和只执行一次交换的 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...