循环播种的排序算法

Tor*_*sok 4 java sorting algorithm

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

以下是我希望如何工作:
假设您有16名玩家,并且您需要4组玩家.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Run Code Online (Sandbox Code Playgroud)

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

1 8  9 16
2 7 10 15
3 6 11 14
4 5 12 13
Run Code Online (Sandbox Code Playgroud)

所以列表的最终结果是:

1 8 9 16 2 7 10 15 3 6 11 14 4 5 12 13
Run Code Online (Sandbox Code Playgroud)

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

1 4 5 8  9 12 13 16
2 3 6 7 10 11 14 15
Run Code Online (Sandbox Code Playgroud)

这将是:

1 4 5 8 9 12 13 16 2 3 6 7 10 11 14 15
Run Code Online (Sandbox Code Playgroud)

有人可以帮我找到一个可以做到这一点的算法吗?

Ben*_*ler 5

听起来你想打印boustrophedically数字:

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;
  }
}
Run Code Online (Sandbox Code Playgroud)

当使用num = 4运行时,它会打印:

[1, 8, 9, 16, 2, 7, 10, 15, 3, 6, 11, 14, 4, 5, 12, 13]
Run Code Online (Sandbox Code Playgroud)

当使用num = 2运行时,它会打印:

[1, 4, 5, 8, 9, 12, 13, 16, 2, 3, 6, 7, 10, 11, 14, 15]
Run Code Online (Sandbox Code Playgroud)

它在O(n)中运行,这对于这个问题是最好的.