如何在按下按钮时只执行一次交换?

How can I perform only one swap on button press?

async bubbleSort(values, size) {
    sort_button = true;
    for(var i = 0; i < size - 1; i++) { 
        for(var j = 0; j < size - i - 1; j++) { 
            if(values[j] >= values[j + 1]) {
                states[j] = 1; // << Highlight comparisons 
                states[j + 1] = 1; 
                if (step_button == true) {
                    // TODO: Swap only two elements
                } else if (step_button != true) {
                    await this.swap(values, j, j + 1);
                }
            } 
            states[j] = 2; 
        } 
        states[j] = 0; // << Sorted Order 
    } 
    sort_button = false; 
    return values; 
} 

我正在尝试为以下算法添加一个步骤特征。当按下步骤按钮时,我希望执行一次交换并执行其后的代码。我试过使用 break and continue 但这并没有给我想要的结果。如何在每次按下按钮时简单地交换数据集中的两个元素?

如果我是你,我会复制数组并在后台处理复制的版本并存储交换列表。

每次按下按钮时,我只获取列表的顶部元素并交换索引。

示例:这个从 0 开始的数组 3 1 2 掉期清单将是 0 1 1 2

所以 在第一次按下按钮时,我会交换 a[0] 和 a[1] 在按下第二个按钮时,我会交换 a[1] 和 a[2]