我正在寻找一个特定的插入算法,但我想不出这个名字

时间:2013-04-17 23:01:13

标签: c#-4.0 sorting

基本上我有一个方法可以使用选定值的任何数字集合,并按升序重新排序,跟踪新选择的值。

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

我现在需要做的是能够交换2个号码并保持订单不变。如果我想要将4与4交换,我需要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

0 个答案:

没有答案