シリーズ記事の目次
第1章 予備アルゴリズム(1): 簡単なソートアルゴリズムを通じて時間計算量を理解する
第 2 章予備アルゴリズム (2): 挿入ソートの詳細と複雑さを詳しく紹介します。
第3章 予備アルゴリズム(3):二分法の解説と実装(C言語)、順序配列における二分法の応用
目次
2. 挿入ソートとバブル (選択) ソートはなぜ異なるのですか?
序文
前回の記事の内容を復習しましょう? 時間計算量と余分な空間計算量について説明し、時間計算量ではどちらのアルゴリズムの処理が速いかを比較する方法を説明し、選択ソートも紹介します。最初の章を読みたい場合は、 「アルゴリズム: 単純な並べ替えアルゴリズムを通じて時間計算量を理解する」をクリックして ご覧ください。
次に、別のソートである挿入ソート を紹介します。編集者は挿入ソートについてあまり詳しくありません。バブル ソートと選択ソートについてはよくわかりません。今日の学習を通じて理解して深めていきます。このブログで私が学んだことのエッセンスを示すことができれば幸いです。
1. 挿入ソートの概要 (例付き)
挿入ソートはバブル ソートや選択ソートほど愚かではありませんが、それでもある程度のスキルが必要です。下の写真を見てください: 英雄の出身地を表すグラフィックスがまだ使用されています: (英雄の出身地のボスによって書かれたアルゴリズム)。
挿入ソートは基本的に0 から j までを比較し、位置 j の数値と位置 j よりも小さい数値を1 つずつ比較し、それより小さいか大きい場合は数値を交換します。上図から明らかなように、。コードの実装は次のとおりです。
for (int i = 0; i < n - 1; i++) //做到有序
{
for (int j = i ; j >= 0 && arr[j + 1] < arr[j]; j--) //j+1位置的数永远是要处理的数
{
//这种交换方式在后面进行讲解
//arr[j] = arr[j] ^ arr[j + 1];
//arr[j + 1] = arr[j] ^ arr[j + 1];
//arr[j] = arr[j] ^ arr[j + 1];
//交换变量
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
2. 挿入ソートとバブル (選択) ソートはなぜ異なるのですか?
選択ソートやバブルソートの時間計算量はデータの状況とは無関係であり、データの状況に関係なく操作を実行する必要がある厳密な処理です。
例:選択ソート、最初のステップは 0 から N-1 までで、データの状況に関係なく、一度実行する必要があり、その後 2 番目のステップが実行されます。データの状況が良くても悪くても、時間の複雑さは変わりません。バブル ソートも同様で、データの状態に関係なく、0 と N の間で 2 つの数値が比較されます。
挿入ソートの時間計算量はデータの条件に関係します。
例:最悪のデータを使用する場合: 7 6 5 4 3 2 1、挿入ソートの時間計算量はO(N^2)です。順序付けされたデータを使用する場合: 1 2 3 4 5 6 7は、前のデータと比較するだけです。番号と次の番号を入れ替えることなく、挿入ソートの時間計算量はO(N) です。
第 1 章の内容から、挿入ソートの計算量は O(N^2) であることがわかります。時間計算量は他の 2 つのソートと同じですが、定数レベルでの挿入ソートの演算は次のようになります。これら 2 つよりも優れていますデータが常に最悪であるわけではないため、並べ替えの方が優れています。
要約する
今日は以上が話したいことです. この記事では挿入ソートとその時間計算量について紹介します. 読んだ後にコメントしていただければ幸いです. ありがとうございます!