現在、D プログラミング言語を学習しようとしています。
付属のサンプルで実行すると OutOfMemoryError を返す、この小さなクイックソート アルゴを作成しました。
import std.stdio;
import std.algorithm;
int[] qs(int[] ary)
{
if(ary.length <= 1)
{
return ary;
}
int pivot_pos = 0;
int pivot = ary[pivot_pos];
for(int i = 0; i < ary.length; i++)
{
if(ary[i] < pivot)
{
ary = ary.remove(i) ~ ary;
pivot_pos++;
}
else
{
ary ~= ary.remove(i);
if(i < pivot_pos)
pivot_pos--;
}
}
return qs(ary[0..pivot_pos]) ~ qs(ary[(pivot_pos+1)..ary.length]);
}
int main()
{
int[] ary = [ 2, 1, 4, 1, 6, 78, 3, 5, 10, 129, 234, 3, 5 ];
ary = qs(ary);
foreach(int element; ary)
{
printf("%d ", element);
}
return 0;
}
これを解決する方法やアルゴリズムの何が問題なのかヒントはありますか? Dを学ぶ方法と私が気にかけなければならないことはありますか?