Java中整数数组中哪个更昂贵的操作交换或比较

Wal*_*alt 5 java sorting time-complexity

Java中整数数组中哪个更昂贵的操作交换或比较?或者他们都可以被认为是一样的?

上下文:对几乎已排序的数组进行排序(我不是在谈论 k 排序数组,其中每个元素从正确位置最多偏移 k)。即使我们使用插入排序,最后的比较次数也将与任何数组或最坏情况下的比较次数相同。不是吗?只是掉期会更少。如果我错了,请纠正。

Iva*_*tyk 5

掉期应该更贵,因为它包括:

  1. 从内存读取数据到缓存
  2. 从缓存读取数据到寄存器
  3. 将数据写回缓存

比较应该更便宜,因为它包括:

  1. 从内存读取数据到缓存
  2. 从缓存读取数据到寄存器
  3. 在两个寄存器上执行单个比较操作(这应该比将两个整数写入缓存快一点)

但是现代处理器很复杂并且彼此不同,因此获得正确答案的最佳方法是对代码进行基准测试。