はてなキーワード: ヒープソートとは
メモリを使わないようにする バケツソートなどのアルゴリズムにたいして
ヒープソートなどヒープを使う
クイックソートなどようにツリーを使うなどメモリを使うと高速化される。
他方当然ではあるが、メモリーは有限のリソースであるから、メモリーを、ある一定以下におさえつつ、高速なロジックという考え方がある。
速度優先アルゴリズム
という2つの考え方が生まれる。メモリはどんどん消費しても良いから高速に完了すれば良いという考え方と、ある一定以内にメモリ消費を抑え、速度の高速化を目指すというものである。メモリを追加で消費しないことという制限条件が付くと、バケツソートもなかなか、すぐれたアルゴリズムである。
これを、あたまにいれないといけない。
アルゴリズムというものは、どういう条件下の場合、最速という考え方があり
さまざまな条件、それこそCであるアンドロイドであるサーバマシンであるなどにより、違ってくるので、機材に合わせて、調整するという仕事が必要になってくる。
一気に並べてみる
int i; int space; for (int i = 0; i < 8; i++) { for (space = 0; space < i; space++) { printf(" "); } printf("Hello world\n"); }
すまん <は半角の<に置き換えてくれ(w)
int i; int space; char buffer[8]; char buffer2[8]; memset(buffer, 0, 8); memset(buffer2, 0, 8); for (int i = 0; i < 8; i++) { memset(buffer, 0x20, i); printf("%sHello world\n",buffer); }
int i; int space; char buffer[8]; char buffer2[8]; memset(buffer, 0, 8); memset(buffer2, 0, 8); for (int i = 0; i < 8; i++) { buffer[i] = 0x20; printf("%sHello world\n",buffer); }
この場合は特に影響はないが一般的にはmemsetを使う使わないは大きな影響になるので
std::string space; for (int i = 0; i < 8; i++) { printf("%sHello world\n", space.c_str()); space += " "; }
std::string space_org; for (int i = 0; i < 8; i++) { std::string space = space_org + " "; printf("%sHello world\n", space.c_str()); space_org = space; }
ざつにかんがえても 書き方いろいろ
つまり まぁ どれがいいというよりは
状況に応じてかき分けていく必要がある
学校の授業などだと
アルゴリズムの話で
ヒープソート マージソート クイックソートの比較みたいな話があるけど
そこまで難しい話にいかなくても
書き方がたくさんある