c++ - last-- 有什么用?这里?

标签 c++ algorithm iostream bubble-sort

我是 C++ 和算法的新手,谁能帮我解释一下代码中间 (last--;) 的用法?我得到的解释是数组每次通过都会增加一个值,所以我们需要在那里放一个 last--。我试过去掉它,它不影响任何东西,所以有必要放一个last--;吗?

void bubbleSort(int array[], int size)
{
    bool swap;
    int temp;
    int last = size - 1;    

    do
    {
        swap = false;

        for (int count = 0; count < last; count++)
        {
            if (array[count] > array[count + 1])
            {               
                temp = array[count];
                array[count] = array[count + 1];
                array[count + 1] = temp;
                swap = true;
            }
        }

        last--; 

    } while (swap != false);
}

最佳答案

I have tried to remove it, it doesn't affect anything,

嗯,你测试过性能吗?

尝试一个巨大的数组并测量在有和没有那条线的情况下进行排序所花费的时间。

该行确保内部循环不会访问已经排序的数字。

如果删除该行,内层循环每次都会迭代size次。在最坏的情况下,将给出 size x size 迭代。

有了这行,内层循环会先迭代size次,然后是size-1,然后是size-2……在将给出 size x (size-1)/2 迭代的最坏情况,即近似值。迭代次数减半,从而提高性能。

关于c++ - last-- 有什么用?这里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58110445/

相关文章:

c++ - 如何在收到 2 个数据包后唤醒线程

c++ - 霍夫曼编码的字节频率表

c++ - 在 C++ 中解析字符串

php - 要求社会网络分析(SNA)算法

查找一组 git 项目何时损坏的算法?

c++ - std::streambuf::overflow 的正确实现

写入输出文件的 C++ 星形菱形图案变得困惑

c++ - 更改文件/路径扩展名

python - 如果不修改,dicts 会保留迭代顺序吗?

c++ - 在 IOStreams 库中使用 ignore(numeric_limits<streamsize>::max()) 是否可以处理任意大量流?