重複して含んでいる要素の数が分かります。この方法には無駄があります。つの配列がソートされているという仮定を使うともっと効率よく調べることができるのです。つの配列を最初の要素から同時に調べることができます。具体的には次のようなアルゴリズムです。出力するこのアルゴリズムは配列の要素の小さい方から順番に比較しています。それぞれの配列を「見ている場所」であり、見ている場所を徐々に後ろに動かしています。つの配列はソートされているので、既に通り越した要素は今見ている場所の要素とは絶対に等しくないというのがキーポイントです。先ほどと同じ例で、このアルゴリズムの動作を確かめてみます。重複する数なので、重複した数の個数を+1する。両方の配列のインデックス(注目する要素の位置)を+1する。配列Aのインデックス(注目する要素の位置)を+1する(配列Aの次に大きい数で比較を試みる)というのをループで回せば良いのではないかと思います。|1簡単にやるには単純な二重ループを書けば良いのですが、双方の配列が昇順にソートされていることを利用して内側のループをうまく制御するとO(N)の計算量ですみます。Nの値が1000000のオーダーになると単純二重ループとは全然差が出てきます。0;}入力データの作成と結果の出力部分が長くなってしまいましたが、arr1を舐めるためのiとarr2を舐めるためのjを別々に制御して、同じ要素を舐めないように(でも重複要素は見逃さないように)ループしているだけです。内側のループにもfor文を使っても良かったんですが、慣れてないと???なコードに見えそうなのでwhileにしておきました。jの変化を追って見てください。比較対象にする単純二重ループの方は、ぜひご自身で完成させて、両者の速度の違いを比較して見てください。さんの「より効率的な方法」と同じ内容です。さんのコードの方がわかりやすそうですね。|1出現する要素の範囲がある程度決まってて、メモリもある程度潤沢に使えるのであれば、バケツを使う方法もあります。最大値と最小値さえわかれば、両配列がソートされていなくとも重複がわかるのも利点です。printf("の%d件です。0;}以下のサイトで動作確認済みです。|0配列の要素の傾向によっては二分探索の使用も考慮の余地があると思いますので、例を出しておきます。基本的には既にあるループを用いた回答(1、2、3)と同じです。一気に進めることで高速化を試みています。二分探索の使用で速くなるのは、大ざっぱに言うと配列Aと配列Bの要素の分布が大きく異る場合で、要素の範囲があまり重なっていなかったり、一方の要素数が他方に比べ極端に少なく疎であるようなケースです。似たような分布(例えば、ある範囲に含まれる数の偶数をAに、奇数をBに含めた場合)では逆に遅くなります。二分探索でなく、順番に見ていくものにすれば、他の回答で説明されているアルゴリズムとほぼ同じになるはずです。中のコンパクトなループを回る割合が増えるので、多少は速くなることが期待できますが、C言語の場合はほぼ影響が無いでしょう。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。以下の組み合わせの総数の求め方について0ポインタの値をバブルソートで並べ替えたい3ErrorSortがなぜ、役に立たないのか教えてください。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。