10/12/03 00:08:55
>>275
バブルソートの改良案は理解できます。
>>269 に沿って記述すれば、一回のループで値が大きいものから順に配列の引数の大きい側に寄せられていきますから、
i 回ループをまわれば配列の大きい側から i 個までは比較交換する必要はない、というわけですね。
ただ、以前よりバブルソートのお題は、URLリンク(en.wikipedia.org) に沿ってかくようにしています。
改良しても計算オーダーは、やはりΟ(n^2) で変わりがない、ということもあります。
(改良前:n^2, 改良後:1/2 * n * (n + 1))
>マクロにしちゃうのは?
構造体の配列があって、その構造体独自の大小関係を自前で定義して、ソートをかけることを想定しています。
struct c { double r, i; } a[100];
cmp(struct c *a, struct c *b) { return (a->r * a->r + a->i * a->i) - (b->r * b->r + b->i * b->i); }
myqsort(a, 100, sizeof(struct c), cmp);
stdlib.h の qsort() を一度自分で実装したくなって、この問題に着手した次第です。