毎回サイズを縮小する必要はない。いつかどこかで解放してやる必要がある。さん回答有難うございます。ポインタ、メモリ管理を学習中なので力不足で皆様の回答のコメントはとてもできません。さんはメモリ管理でヒープに積むということと思います。再帰を避けてループにすると述べられていると思います。(C#はキューとかスタックはあったと思いますがCにはなかったような?なんせC初心者ですから。さんのコードを参考にじっくりと学習させて頂きます。今学習中の部分がポインタとメモリ管理であり、よい教材になりそうです。(学習と言っても本を読む独学です)取り急ぎお礼の返事とさせて頂きます。いじょqsortって再帰しない保証ありましたっけ?質問者の方は再帰をループにしたコードを知りたいと仰っておられるので気になりました。与えられた物を使った方が良いと言われるのであればそれもわかりますが、アルゴリズムを勉強するのはそれとは別の話だと思います。sizeof(void*));で第一引数に与えているアドレスは正しく取れないと思います。質問者の方は再帰をループにしたコードを知りたいと仰っておられるので気になりました。与えられた物を使った方が良いと言われるのであればそれもわかりますが、アルゴリズムを勉強するのはそれとは別の話だと思います。前の続きだとは思ったのですが、ハンドルには「学習中」と有りますが、質問文には書いてありません。何を勉強しているのか、主題がきになったので。再帰をループで実現する考え方なのか。ソートのアルゴリズムなのか。ソートなら、分割の種の取り方が1つの肝です。そこを自力でゴソゴソやるより、用意されているものを利用するほうが良いでしょう。用意されたライブラリには付いていません。ソート関数を作ることが目的なら、自力で実装するより組み込み関数を使う方が良いと思いました。第一引数に与えているアドレスは正しく取れないと思います。>あ......そうですね。13:36:42)アルゴリズムの勉強ということで、元の処理を極力破壊せずに再帰をループにしました。ないので、SWAPはマクロにしました。スタックサイズは、面倒なので100固定でオーバフローのチェックはしてません。n)が最大なので、最初にmalloc一発でいけますね。さんはスタックにつみそうです。(C#はキューとかスタックはあったと思いますがCにはなかったような?なんせC初心者ですから。)用意されているのですが、要は、同じ処理を自分で書けよいのです。再帰を置き換えるのがスタックである理由は、再帰が深くなっても、必ず最後に積んだものから復帰させていけば良いからです。番目に格納されるのは、最上階にあるデータの情報で、下の階層に行く直前の内容を保持します。した要素の続きから、その階層の処理を再開すれば良いのです。n)が最大なので、最初にmalloc一発でいけますね。n)が最大なので、最初にmalloc一発でいけますね。メジアンを必ず取れればそうなりますが、そうは問屋がおろさないのが難しいところですスタックの深さ≒再帰の深さでしょうか。分割したとき要素が1の側はスタックにつまないという前提であれば、スタックは最大n個分で良いんですかね。n)が最大なので、最初にmalloc一発でいけますね。>>>>メジアンを必ず取れればそうなりますが、そうは問屋がおろさないのが難しいところですクイックソートの計算量はn^2が最大です。スタックの深さ≒再帰の深さでしょうか。再帰をスタックで展開するのなら、スタックの深さ=再帰の深さです。(計算量という言葉はいつも感覚的に使用しているもので・・)区別します。一般にはそこまで言及しません。計算量という単語もコンテキストに応じて使い分けられます。掛け算を高速化したい、というコンテキストなら計算量は足し算や引き算の回数になります。比較にたくさんのコストがかかるようなデータを議論する場合は違う話になります。スタックの深さ≒再帰の深さでしょうか。分割したとき要素が1の側はスタックにつまないという前提であれば、スタックは最大n個分で良いんですかね。なるって悪夢が起こるなら振り分けをN回やらにゃなりません。この振り分けのたんびにスタックを消費するのなら、スタックの"最悪消費量"はNに比例しますわね。n)が最大なので、最初にmalloc一発で...というのは、Quicksort関数呼び出し1回を基本の計算量とした時に再帰の深さ=スタックの深さ=単位計算量という意味です。