从当前季节开始,对季节进行排序

时间:2015-01-05 11:05:33

标签: arrays algorithm sorting

我有4个季节的阵列:Summer, Autumn, Winter, Spring。我希望能够保持这种内在的顺序,但是将当前季节作为数组中的第一项。

因此,如果当前季节为Winter,则结果为:Winter, Spring, Summer, Autumn

在我看来,这基本上涉及将数组视为“循环”,这样如果你从一开始就移动一个元素,它就会出现在结尾,反之亦然。我有一些丑陋的实现,但我希望有一些美好而干净的东西。

我用Ruby编写,但任何显示算法的语言(或伪代码)都没问题。

3 个答案:

答案 0 :(得分:3)

简单的解决方案是将元素保留在 circular linked list 中,每当更改季节时,将指针放在存储列表头部的位置。

这将相当优雅且易于使用,如果您只处理4个元素 - 链表的性能在这里确实不是问题。

答案 1 :(得分:1)

在做了一些研究之后,我发现Ruby的数组有rotate方法,它可以完全满足需要:

base_order = ['Summer', 'Autumn', 'Winter', 'Spring']

sorted_order = base_order.rotate(base_order.index('Winter'))

# Yields ['Winter', 'Spring', 'Summer', 'Autumn']

还有一个版本#rotate!,它也会改变基础数组。

答案 2 :(得分:0)

使用mod 4访问阵列。你的数组看起来像[Summer, Autumn, Winter, Spring];假设当前季节为get(int index, int current),其中Summer映射为0,Autumn为1等,则创建一个函数index,该函数在索引current获取元素。

string get(int index, int current)
{  return array[ (current + index + 4) % 4 ];
}

这比循环列表解决方案更快更简单。如果当前季节为冬季(2),则get(1, 2)将返回3,get(3, 2)将返回1.