java - 循环播种的排序算法

标签 java algorithm sorting

我想创建一个程序,在其中放入玩家列表,其中第一行是最好的玩家,最后一行是最差的玩家。然后它会做一个算法,并将这些玩家分类到技能相同的种子组中。

下面是我希望它的工作方式:
假设您有 16 个玩家,并且您想要 4 个玩家组。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

现在你想把它们分成四个相等的组:

1 8  9 16
2 7 10 15
3 6 11 14
4 5 12 13

因此列表的最终结果将是:

1 8 9 16 2 7 10 15 3 6 11 14 4 5 12 13

但是假设您有相同的 16 个玩家,但您只想要 2 个组,那么它将是:

1 4 5 8  9 12 13 16
2 3 6 7 10 11 14 15

这将是:

1 4 5 8 9 12 13 16 2 3 6 7 10 11 14 15

谁能帮我找到一个可以做到这一点的算法?

最佳答案

听起来您想打印数字 boustrophedonically :

import java.util.ArrayList;
import java.util.List;

int size = 16;
int num = 4; // In your example either 4 or 2.
int rowLength = size / num;
List<Integer> sortedList = new ArrayList<Integer>();
for (int i=0;i<size / rowLength;++i) {
  int t = i;
  for (int j=0;j<rowLength / 2;++j) {
    sortedList.add(t+1);
    sortedList.add(t+(2*(num-i)));
    t += 2*num;
  }
}

当以 num=4 运行时,它打印:

[1, 8, 9, 16, 2, 7, 10, 15, 3, 6, 11, 14, 4, 5, 12, 13]

当以 num=2 运行时,它打印:

[1, 4, 5, 8, 9, 12, 13, 16, 2, 3, 6, 7, 10, 11, 14, 15]

它在 O(n) 中运行,这是解决此问题的最佳方法。

关于java - 循环播种的排序算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29720508/

相关文章:

java - 永远隐藏导航栏

javascript - 识别不同类型的三 Angular 形

python - 对数生成的项目值

algorithm - 排列数字对,使相邻对的成员相等

C++:用于高效插入和检索自定义数据的数据结构

java - 找不到/安装 libXtst.so.6?

java - 检查 HashMap 中的列表是否包含 2 个值并且仅包含这 2 个值

java - 检查 Mongodb java 驱动程序中是否存在子字段

algorithm - 是谷歌愚蠢还是我?可能发生冲突的哈希集与经典安全算法

c++ - 最大重叠事件数的持续时间