Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 循环遍历数组宽度搜索_Arrays_Algorithm_Sorting - Fatal编程技术网

Arrays 循环遍历数组宽度搜索

Arrays 循环遍历数组宽度搜索,arrays,algorithm,sorting,Arrays,Algorithm,Sorting,这个问题的标题可能有点误导,但我不确定如何描述我的问题 我想重新构造数组的键,使循环按以下模式跳转: 例1: keys from 1,2,3,4,5,6,7,8,9 will lead to 1,9,5,3,7,2,6,4,8 以第一个元素-1为例 以最后一个元素-9为例 取中间(1+9)/2=5 上半场,在1-5-3的中间 跳到下半场,打5-9-7中间 跳回到上半场的上半场,然后拿2分 跳回到下半场的上半场,然后拿6分 跳回到上半场的下半场,然后拿4分 跳回到下半场的下半场,然后拿8分

这个问题的标题可能有点误导,但我不确定如何描述我的问题

我想重新构造数组的键,使循环按以下模式跳转:

例1:

keys from 1,2,3,4,5,6,7,8,9 will lead to 1,9,5,3,7,2,6,4,8
  • 以第一个元素-1为例
  • 以最后一个元素-9为例
  • 取中间(1+9)/2=5
  • 上半场,在1-5-3的中间
  • 跳到下半场,打5-9-7中间
  • 跳回到上半场的上半场,然后拿2分
  • 跳回到下半场的上半场,然后拿6分
  • 跳回到上半场的下半场,然后拿4分
  • 跳回到下半场的下半场,然后拿8分
当然,这是一个理想化的例子,所有东西都可以很好地分割。如果不是这样的话,你就必须在地板和天花板上划分新元素

例2:

key from 1,2,3,4,5,6,7,8,9,10 will lead to 1,10,5,6,3,8,2,7,4,9
由于我对算法和数据结构知之甚少,我尝试使用递归/分而治之,但我没有成功地实现两部分之间的跳跃

所以我想我必须添加一些参数,比如被分割的半部分的长度和位置,但在这里我无法实现

对我来说,有趣的问题是:我的思维是否复杂,是否有更简单的解决方案?还是这个问题真的这么复杂

我很高兴收到任何关于文学或代码片段的建议,可以尝试一下

谢谢并致以最良好的问候
Stephan

我不确定您是否可以通过递归或分治来实现此算法。但您可以使用广度优先搜索优雅地实现这一点。下面是python伪代码,其中有一个元素为interval的队列

#使用整个间隔初始化队列Q
n=len(您的_列表)
#广度优先搜索
Q.push([0,n-1])
虽然Q不是空的:
独立电视台=q.pop_front()
进程(itv)#打印间隔itv的中间元素等。
itv_1,itv_2=将_间隔_分成两部分(itv)
如果len(itv_1)>0:
Q.push(itv_1)
如果len(itv_1)>0:
Q.push(itv_2)

希望它有帮助:)

您需要更好地描述您的问题,可能至少是您的一个示例中的步骤,因为根据当前的解释,很难看到从«键»到最终数组的过程,我扩展了解释。我希望现在能更容易理解。我想你可以通过对(低、高)对的元组进行排队来做到这一点,但它可能不会总是给出你想要的结果。首先是1/2索引,然后是1/4索引,然后是1/8索引,然后是3/4索引,等等。嘿,cntswj,谢谢你的代码,我一回到办公室电脑就会试试。