這裏的排序網絡可能是最有效的,因爲參數數量較少,並且它們的編號是已知的編譯時間(無循環條件)。
氣泡分類很適合分類網絡化。我把它扔在一起。它的工作原理是很簡單的:
import std.stdio, std.string;
void bubbleSort(T...)(ref T values)
{
static if (T.length > 1)
{
foreach(I, _; T[0 .. $ - 1])
{
pragma(msg, format("[%s %s]", I, I + 1));
compareAndSwap(values[I], values[I + 1]);
}
bubbleSort(values[0 .. $ - 1]);
}
}
void compareAndSwap(T)(ref T a, ref T b)
{
import std.algorithm;
if(a > b)
swap(a, b);
}
void main()
{
int a = 10;
int b = 30;
int c = 11;
int d = 20;
int e = 4;
int f = 330;
int g = 21;
int h = 110;
shellSort(a, b, c, d, e, f, g, h);
writefln("%s %s %s %s %s %s %s %s!", a, b, c, d, e, f, g, h);
}
雖然說實話,如果這是標準庫,小於10個參數任何排序網絡應該寫得一手。
編輯:我徹底改變了以前的算法,這實際上是非常不適應。氣泡排序不是最佳,但它實際上排序算法正常。這裏有一些編譯指令可以查看構建的網絡。
這確實很聰明。謝謝。 –
也許您應該在github問題主題中添加對此重要答案的引用,以獲取更多關於爲什麼std.algorithm pull請求被激發的背景信息? –
儘管一個反思... - 並不是所有的元素必須是相同的類型才能在所有方向(組合)上互相'isAssignable'?我相信'!CommonType!T == void'不是一個足夠的要求。 –