Вы можете создать / написать множество сортировочных сетей для каждого возможного размера списка. Внутри сортировочной сети вы используете одну переменную для операции подкачки.
Я бы не советовал делать это в программном обеспечении, но, тем не менее, это возможно.
Вот процедура сортировки для всех n до 4 в C
// define a compare and swap macro
#define order(a,b) if ((a)<(b)) { temp=(a); (a) = (b); (b) = temp; }
static void sort2 (int *data)
// sort-network for two numbers
{
int temp;
order (data[0], data[1]);
}
static void sort3 (int *data)
// sort-network for three numbers
{
int temp;
order (data[0], data[1]);
order (data[0], data[2]);
order (data[1], data[2]);
}
static void sort4 (int *data)
// sort-network for four numbers
{
int temp;
order (data[0], data[2]);
order (data[1], data[3]);
order (data[0], data[1]);
order (data[2], data[3]);
order (data[1], data[2]);
}
void sort (int *data, int n)
{
switch (n)
{
case 0:
case 1:
break;
case 2:
sort2 (data);
break;
case 3:
sort3 (data);
break;
case 4:
sort4 (data);
break;
default:
// Sorts for n>4 are left as an exercise for the reader
abort();
}
}
Очевидно, вам нужен код сети сортировки для каждого возможного N.
Подробнее здесь:
http://en.wikipedia.org/wiki/Sorting_network