【问题标题】:How can I perform only one swap on button press?如何在按钮按下时只执行一次交换?
【发布时间】:2021-05-26 02:45:02
【问题描述】:
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; 
} 

我正在尝试为以下算法添加步进功能。当按下 step 按钮时,我希望执行一次交换并执行它后面的代码。我尝试过使用休息并继续,但这并没有给我想要的结果。每次按下按钮时如何简单地交换数据集中的两个元素?

【问题讨论】:

  • 您需要监控按钮状态的变化。如果当前状态为“on”而先前的状态为“off”,则只需按下一个按钮。如果当前状态是“on”,而之前的状态也是“on”,那不是按下按钮,而是按住按钮。

标签: algorithm sorting break bubble-sort


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多