やってみます!
例として、名前のリストを見てみましょう。あなたも私も、名前のリストをアルファベット順にソートする方法を知っており、それを 100 億回も実行しました。同じことが、たとえば数字にも当てはまります。コンピューターは、並べ替えがそれほど直感的ではない場合でも、データを並べ替えることができる必要があります。
配列をソートするためのコールバック関数には、その配列内の任意の 2 つの項目が互いにどのように関連するかを示すための「ルール」を提供するコールバックを使用して、配列に任意の種類のデータを含めることができるようにするという考えが含まれます。このようにして、並べ替えアルゴリズムはそのデータ配列を取得し、「コールバック」関数を繰り返し呼び出して、どの要素がどの順序に属しているかを判断し、並べ替えられたリストを返すことができます。それがコールバックの本質です。
文字通りの類推が必要な場合は、データのリストを友人に渡すふりをします。友人は並べ替えの方法しか知らず、リスト内の項目がどのように関連しているかは知りません。彼らはあなたに「コールバック」し、「これらの 2 つの要素のどちらが最初に来るのか」という質問をします。そして、データとルールを知っているあなたは、アイテムを受け取り、ルールを適用してから、友達に答えを伝えます。最終的に、このプロセスを複数回繰り返した後、データはソートされて返されます。
このように、-1、0、または 1 を返す「コールバック」は、2 つのデータで呼び出された場合、-1 は「アイテム 1 がアイテム 2 に先行する」ことを表し、0 は「アイテム 1 がアイテムに等しい」ことを表す値を返します。 2」、+1 は「アイテム 1 はアイテム 2 に続く」と言います。データのルールに基づいて返される値を決定する比較を提供するだけです。任意のデータ セットを定義し、問題の「空間」内で希望する優先順位規則を定義できます。余談ですが、これはオブジェクト指向プログラミングの重要な部分です。この「コールバック」のアイデアを活用して、複雑なソート アルゴリズムの汎用バージョンを実装できます。ソートされるデータの数 - すべては、プログラマーがこの「既成の」ソート メカニズムを使用して、ソート ルーチンに必要な「論理的な配管」を提供するためです。
これは、言語にとらわれない方法で説明するための適切なショットだと思います。:)それが役立つことを願っています。
編集。例を挙げましょう:
List:
Item # Value
1 12
2 15
3 9
4 26
5 4
リスト内の最小のアイテムを見つけようとすると、アイテム 1 から始めて、リスト内の残りの各アイテムと比較します。まず、アイテム 1 とアイテム 2 を比較します。
compare(item(1),item(2))
12 の値が15 よりも前にあるため、-1 が返されます。次に、リストの次の項目に移動します。
compare(item(1),item(3))
今回は 1 を返します。これは、12が 9 の後に続くためです。これは、item(3) がこれまでに見つかった最小のアイテムであることを意味します。さて、次のように比較します。
compare(item(3),item(4))
この場合、return -1 を比較します。これは、9 が 26 よりも前にあり、最終的な比較につながるためです。
compare(item(3),item(5))
9 は 4 の後に来るので、この呼び出しは +1 を返します。リスト内のすべての項目を使い果たしたので、item(3) が最小の項目であることがわかります。次に、そのアイテムを「前の」トップ アイテムと交換し、item(2) から始まるプロセス全体を繰り返します。これは、非効率なことで知られる「バブル ソート」の例ですが、この図の目的には有効です。これが、「最初の項目」と「2 番目の項目」の参照の由来です。並べ替えは、言語に関係なく、コンピューター サイエンスの他の問題と同様に、大きな問題を小さな断片に分解することであり、並べ替えとは、大きなリストから 2 つの項目を繰り返し比較することです。