基本上,我有一种方法,它将采用具有选定值的任何数字集,并对它们进行重新排序,以跟踪新的选定值。

所以{21,2,9,13} selectedVal = 9变成{1,2,3,4} selectedVal = 2

我现在需要做的是能够交换2个数字并保持顺序不变。 如果我想用2交换2,我需要3-> 2和4-> 3,但是也需要像3交换1一样,所以1-> 2和2-> 3。

我敢肯定有一个经过验证的算法可以解决这个问题,明天我可能会自己创建一个有趣的算法,但是我想在我的实际应用中使用最快的解决方案。

算法的名称或任何有用的链接将不胜感激。 如果这很重要,我正在使用C#4.0。

编辑-我想出了自己的解决方案,我相信它可以在纸上工作,但是如果有人知道更好的解决方案,我仍然希望得到答复。

假设有序列表总是从1开始,就我而言...

if (newpos < currpos)
   for (int i = newpos-1; i < currpos-1; i++)
   {
       array[i] += 1;
       array[currpos-1] = newpos;
   }     
else if (newpos > currpos)
   for (int i = newpos-1; i >= currpos-1; i--)
   {
       array[i] -= 1;
       array[currpos-1] = newpos;
   }  
else // do nothing since they are trying to swap to the same place

  ask by Smith translate from so

本文未有回复,本站智能推荐: