【问题标题】:sorting an array to make it a circular one对数组进行排序以使其成为圆形数组
【发布时间】:2013-11-03 12:04:02
【问题描述】:

我有一个数组,我只能交换第 i 个和第 i+1 个元素。如何使用最少数量的交换操作将此数组排序为循环数组?

例如我的数组是:-

3 5 4 2 1

然后交换第二个和第三个我得到

3 4 5 2 1

然后交换第四和第五我得到

3 4 5 1 2 

这是2次交换所需的有序循环数组。

另一个例子

4 3 5 1 2

这里只有一次交换第一和第二给我3 4 5 1 2

我应该使用什么算法来实现这一点?

【问题讨论】:

  • 您尝试过什么算法/方法?你至少有一个蛮力算法吗?
  • 另外,你能交换第一个和最后一个元素吗(= 该规则也是循环的)吗?
  • 不...只允许第 i+1 次交换...我试图对元素的位置进行哈希处理,然后检查它们是否应该向右或向左移动..但这并没有很好地解决问题

标签: arrays sorting


【解决方案1】:

您可以将 for 循环与临时变量一起使用,然后对所有数组元素进行排序,但 for 循环应递增 2。

len=array[(array.length)];
for (i=1 ; i<len - 1 ; i=i+2 ){
    temp=array[i];
    array[i]=array[i+1];
    array[i+1]=temp;    
}
temp=array[0];
array[o]=array[len];
array[len]=temp;

这个简单的算法可以在 java 中运行,并根据您的需要完美地对数组进行排序。

【讨论】:

  • 这种技术如何保证最少的交换次数...这里所需的交换次数总是至少为 n/2
猜你喜欢
  • 2020-08-27
  • 2021-10-15
  • 1970-01-01
  • 2017-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多