Я пытаюсь повторно -организовать список предметов по-разному. Здесь я буду использовать целые числа, но это может быть что угодно из этого списка.
В приведенном ниже примере кода 1,2,3,4,5,6,7,8
сортируются в следующем порядке:
1,8,2,7, 3,6,4,5
Итак, сначала. последний. второй. Второй до последнего и т. Д. Это может быть немного неуклюже, но оно работает.
Теперь я пытаюсь вывести список в другом порядке, чтобы он продолжал делиться на две части. Я думаю, что это можно назвать Divide and Conquer, но после попытки / просмотра некоторого рекурсивного кода сортировки и т. Д. Я не слишком понимаю, как это реализовать здесь.
Я надеюсь получить такие номера.
1,8,4,2,6,3,5,7
Первая, последняя, половина, первая половина на полпути, вторая половина на полпути и т. Д.
Другими словами, я пытаюсь разделить набор чисел пополам ... Затем для каждой половины по очереди разделите их пополам. И так далее:
1 2 3 4 5 6 7 8
1 (first item)
8 (last item)
4 (mid item)
2 (mid of first half)
6 (mid of second half)
3 (mid of 1st chunk)
5 (mid of 2nd chunk)
7 (mid of 3rd chunk)
Если бы кто-нибудь мог показать мне, как это сделать, на этом простом примере, это было бы действительно здорово.
static void Main(string[] args)
{
List<int> numberlist = new List<int>();
numberlist.Add(1);
numberlist.Add(2);
numberlist.Add(3);
numberlist.Add(4);
numberlist.Add(5);
numberlist.Add(6);
numberlist.Add(7);
numberlist.Add(8);
int rev = numberlist.Count-1;
int fwd = 0;
// order 1,8,2,7,3,6,4,5
for (int re = 0; re < numberlist.Count; re++)
{
if (re % 2 == 0)
{
Console.WriteLine(numberlist[fwd]);
fwd++;
}
else
{
Console.WriteLine(numberlist[rev]);
rev--;
}
}
Console.ReadLine();
}
Еще несколько диапазонов выборки и вывода для чтения слева направо, сверху вниз:
1 2 3 4 5 6 7
1 7
4
2 5
3 6
1 2 3 4 5 6 7 8 9 10 11 12
1 12
6
3 9
2 4 7 10
5 8 11
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1 16
8
4 12
2 6 10 14
3 5 7 9 11 13 15