x=[2,1,0] -> sortx = (x+1)%3 = [0,2,1]
とする操作なのですが、これは1を真ん中としたときに両端を描画してから真ん中を表示するということらしいです。sortxってなんだろうかと思いましたけど、これは「両端から真ん中に」ソートするってことで納得しました。
ただ、「両端から真ん中に」ソートするのってn=3以外の時にもありうるよなーと思って、nが奇数の時について書いてみました。
#include
// {0,1,2} -> zigzag3 -> {0,2,1}
int zigzag3(int index) {
return (3 - index) % 3;
}
// {0,1,..,2n} -> zigzag -> {0,2n,1,2n-1,..,n-1,n+1,n}
int zigzag(int index, int size) {
if (index % 2 == 0)
return index / 2;
return size - (index / 2) - 1;
}
int main() {
int i;
const int size = 7;
for (i = 0; i < size; i++)
printf("%d ", zigzag(i, size));
return 0;
}