c++ - 如何在 C++ 中优化数组的交换元素
问题描述
我的任务是编写谜机器。我几乎已经完成了,但唯一让我慢下来的是,在每种情况下,整个代码都必须在 3 秒内执行。有成千上万的变量,像 [1000+] 这样的数组,所以我需要优化我的代码。我想改变的第一件事是我的交换功能。我听说过类似圆形阵列的东西,但我不确定它是如何工作的。通常,重点是在每次编码之前,我需要旋转一次转子。如果有高于数千的数字,我想可能需要很多时间,有什么想法吗?首先,我有一个类,存储只使用转子,因为我可以将它们声明为任何数字,但我在每次编码之前声明它们有多少,然后我像普通字母 1 2 3 4 一样设置它们的位置,
for(int i=0;i<ile_rotorow_wiad;i++)
{
rotory_uzyte[i].copy(rotory[wiadomosc.jakie_rotory[i]],ile_liter, rotory_rev[wiadomosc.jakie_rotory[i]]);
rotory_uzyte[i].Obroc(wiadomosc.pozycja[i], ile_liter);
}
这是运行每个循环的代码,而“谜消息”不等于 0。
rotory_uzyte[0].Obroc(2, ile_liter);
功能奥布罗克:
void Rotor::Obroc(int pozycja, int ile)
{
for(int i=0;i<pozycja-1;i++)
{
for(int j=0;j<ile-1;j++)
{
swap(pozycje[j],pozycje[j+1]);
swap(pozycje_rev[j],pozycje_rev[j+1]);
}
}
}
正如您所看到的,对于大量数字,它是无用的,而且会花费很多时间。如果它像圆圈一样“循环”,如何优化它的任何想法我都无法命名。正如我提到的那样,圆形数组会是一件好事吗?那应该怎么看呢?
解决方案
推荐阅读
- php - 下拉值保持选中状态
- javascript - 使用分组元素 dc.js 的百分比聚合数据表
- ios - iOS 电话通话对话框未显示
- c++ - C++ 异步期货没有完成
- android - 同一类的两个实例不能产生任何方法。(事件总线otto)
- mysql - 为 table2 中的每个元素向 table1 添加值,并使用 table1 中的 MAX(id) + 1 作为 table2 id
- c# - 在 UWP 中获取视频文件的“媒体创建”日期
- python - scrapy:重命名时没有下载图片
- java - Java - 不同的参数导致不同的输出
- bash - 将 bash 脚本链接到一个脚本文件中