1

私は現在、多次元配列 (現在は 3 次元) を最初と 2 番目のアイテムの合計値でソートする必要があるアルゴリズムに取り組んでいます。具体的には:

(項目 i と j が入れ替わる条件)

if ((Array[i][1]+Array[i][2]) > (Array[j][1]+Array[j][2])) return 1;

テスト目的で、select sort を使用することにしました。ただし、私のアルゴリズムは、すべての魔法を 5 秒以内に実行する必要があります。約 200 000 個の項目がある場合、そのような配列をソートするためにソートを選択すると、それ自体が約 10 秒かかります。

私は自分のプログラムの残りの部分にかなりの自信を持っているので、より良いアルゴリズムを使用することにしました。UNIX システムには組み込みのクイックソート機能 qsort (ターミナルでman qsortから利用可能) が含まれていることを認識しています。ただし、実装方法がわかりません。

私の考えは、メイン配列の項目のインデックスを含む、同じ長さの 1 次元 (1D) の別の配列を作成することでした。それにより、セカンダリ 1D 配列のみを並べ替えることができる場合があります。最初のアイテムはメイン配列内のアイテムのインデックスが最小で、2 番目は 2 番目に小さいというようになります。

しかし、どうすればそれを行うことができますか?Qsort 関数には、スワップするかどうかを決定するための比較関数が必要です。独自の比較関数 (質問の冒頭で述べたものなど) を作成した場合、メインの配列がメインの中でのみ指定されている場合、(Array[SeconArray[i]][0]) のようなものでどのように対処できますか?したがって、同じファイル内の別の関数からアクセスできませんか?

これを解決するためのヒントやコツを教えていただければ幸いです。また、qsortの使用にも熱心ではありません。別の並べ替えアルゴリズムの方が優れていると思われる場合は、お知らせください。

どうもありがとう

4

1 に答える 1