特に「標準」(非HPC)アプリケーションを作成する場合、どのソートアルゴリズムを選択するかを検討しますか、それともクイックソート(ほとんどのライブラリが単にソートと呼ぶもの)で解決しますか?特定の状況ではある程度は有益かもしれませんが、一方で、適切な最適化には、問題を分析してベンチマークを作成するためにある程度の時間が必要です。
一般に、よりエキゾチックなことをする特別な必要がない限り、デフォルトの方法を使用すると、すべてがずっと読みやすく、理解しやすくなります。
パフォーマンスの問題が発生した場合(または場合によっては強く疑われる場合)、複雑さを増す時期です。
一方、ソートする必要のある種類のオブジェクトのソートが組み込まれていないほど低い言語を使用している場合は、すべてのベースをカバーする1つまたは2つを選択して、それらを実装してみてください。
提供されたライブラリルーチンを常に呼び出します。ただし、そうしない非常に非常に正当な理由がない限り(そして、documentなぜそうなるのか)。
これは、ソートアルゴリズムを完全に正しくすることが難しいためです。 Javaクイックソートには非常に大きなデータセットがあり、Sunによって識別、修正、顧客に配信されたため、その必要はありませんでした。
また、Java 7のデフォルトのソートは、より新しい、より良いソートにアップグレードされました。これも無料です。
デフォルトのソートがおそらくでは不十分でない限り、それを使い続けてください。
ある会議で、これについての素敵な話を聞いたことがあります。
マイクロソフトでは、誰かがVB app(c。VB 3)を書いていて、たくさんの値があり、それらが欲しいと言って、たくさんの人にメールを送りました。コンボボックスに順番に表示されるようにするには、どのように対処すればよいですか。
誰もが古いコンピュータサイエンスの教科書を探して飛び込み、非常に効率的なルーチンを調べてVisual Basicに移植し、彼に郵送しました。ある人は、「コンボボックスにいくつの値がありますか?」とメールで返信しました。
「約50」と返事が来ました。
「sortedプロパティをTRUEに設定するだけです」。
99.9999%のインスタンスでは、ライブラリ、コントロール、またはSQL選択を使用して並べ替えを行うのが最適です。これは、ライブラリルーチンと作成するものとのパフォーマンスの違いがごくわずかであり、労力とメンテナンスのオーバーヘッドが結果を大幅に上回るためです。
これは、時期尚早の最適化についての古典的な引用を引き出す時です。ほとんどの場合、それは本当に問題ではありません。最近のCPUの速度では、ほとんどのデータセットをバブルソートすることができますが、あまり気付かないでしょう。しかし、非常に大きなデータセットを並べ替えていて、並べ替えのパフォーマンスが問題になり始めた場合は、他のオプションを必ず検討する必要があります。
それは明らかにビットとタイムスライスには関係ありませんが。マージソートはクイックソートよりも書きやすく、理解しやすいと思います。したがって、独自のソートアルゴリズムを作成する場合は、それを使用します。
少なくとも有能に書かれたライブラリでは、組み込みのsort
が単なるクイックソートではなく イントロソート として実装されることを期待しています。違いがそれほど重要になることはめったにありませんが、Introsortは、Quicksortの最悪の場合のパフォーマンスの低下を排除し、より一般的なケースへの影響を最小限に抑えます。
しかし、あなたの質問に答えるには:はい-それはあなたが通常始めるべきものであり、それが問題であることを示すプロファイラーの結果が得られるまで/そうでない限り、それはそこに留まるべきです。