今日では、次のようにソートの良い学習アルゴリズムは、いくつかの結論は統合と考えることができます。
最初のソートアルゴリズムには良くも悪くも異なるシナリオ、異なるソートアルゴリズムの効率ではありません。
1.並べ替えを選択し(選択ソート):
ソートは、第1の領域の間隔の最小値に揃えることができます
例えば:配列[5、1、3、2、4、6]
ステップ1:アレイの最小値を選択するが、一般に、5の値に設定されています
ステップ2:基本となる値の値であり、以下の値は、交換価値で、そうでない場合はそのまま小さい場合には、
ステップ3:サイクル次のエリア。
例:[5、1、3、2、4、6]デフォルトの最小値は5であり、その後の1と交換可能である、最小面積。[1、5、3、2、4、6]
[1、5、3、2、4、6]次の区間[5、3、2、4、6] 5デフォルトの最小値、およびそれに続く2と交換可能である最小の領域を識別するために、[2、3は、5、4、6]
[2、3、5、4、6]次の区間[3、5、4、6]デフォルト最小3、最小値、すなわち交換機4と、その後のゾーンを識別するために、彼は小さな[3を変化させませんでした、5、4、6]など、後続に
// 逆配列値 関数スワップ(ARR、I1、I2){ VARの TEMP = ARR [I1]; ARR [I1] = ARR [I2]; ARR [I2] = TEMP; } / * * *選択ソート * @param ARR} * { * / 機能選択ソート(ARR){ ため(varが I = 0、I <arr.length - 1; I ++ ){ // その最小値を記録し、続いている場合よりも小さいが、彼の位置変化する VARを =分ARR [I]; VARの指数= I; のための(VAR J = I + 1、J <arr.length - 1;。。J ++ ){ もし(ARR [J] < 分){ 分 = ARR [J]。 インデックス = J; } } スワップ(ARR、I、インデックス) } }
2.バブルソート(バブルソート):
バブルソート、ソート順序の最大面積の領域の最後のビットが、特定の方法であってもよいです。
- 前者が後者の交換よりも大きい場合、第1および第2のビット2とを比較します
- ビット2及び3の比較、前者が後者の交換よりも大きい場合
- だから、上の領域の最後の2との比較まで
- シーケンスが順序を完了するまでのプロセスを繰り返します
例:[5、1、3、2、4、6]
第一:[1、5、3、2、4、6]
第二:[1、3、5、2、4、6]
第三:[1、3、2、5、4、6]
第四:[1、3、2、4、5、6]など
/ * * *バブルソート * @param {} ARR * / 機能バブルソート(ARR){ ため(VAR I = 0、I <arr.length - 1; I ++){ // サイクル数回 ため(VAR J 0 =; J <arr.length - 1 - I; J ++。){ // 時間arr.lengthバブリングを通過する必要があります1。 // I:0サイクル:〜0。1-I-arr.length // I :. 1サイクル:〜0.1-I-arr.length // I:2サイクル:arr.length-0 1〜I- IF(ARR [J]> ARR [J + 1 ]){ スワップ(ARR、J、J + 1 ); } } } } VARARR = [5、1、3、2、4、6 ]。 バブルソート(ARR)。 console.log(ARR)
3.挿入ソート(挿入ソート):
シーケンスについて行うには2つの部分、一部が発注される、不規則部分に分割されたデータを連続的に無秩序部分から採取される、ソート全体が完了するまで、順序付けられた部分に付加されます
原理:配列[5、7、2、3、6]
- 無秩序と配列の配列に命じた(5)(7236)
- 順序付けられたシーケンスの拡張を続行(57)(236)
- (257)(36)順序付けられたシーケンスの展開を続行
- (6)(2357)の順序付けられたシーケンスの展開を続行
- (23567)の順序付けられたシーケンスの展開を続行
- ソート完了
書かれたプログラム:
[5、1、3、2、4、6 、次に]、最初の到着後の値を保存する、(5,1,3)の順序付けられたシーケンスを仮定[I] = 2 TEMPに、TEMP、および持っています値シーケンステーブル比較の最後のビットの前に、
それは、1の前の最後の一つであり、このときの少ない温度より、温度が最後の上に配置されるので、最終的に順序付けられたリスト内の元の値、 (5,1,2,3)となり、サイクル缶
/ * * *挿入配列 * * @param {} ARR * / 関数挿入ソート(ARR){ ため(VAR I = 1; I <arr.length I ++ ){ IF(ARR [I] <ARR [I - 1] ){ // 前者がビットよりも大きい場合、 // i番目のビットの値は、キュー正しい位置順序付けの前に添加される VaRの TEMP = ; ARR [I] のための(VAR J> = 0; J = IをJ - ){ IF(J> 0 && ARR [J - 1]> TEMP){ ARR [J] = ARR [J - 1]; // 最後の順序付けられたリストの前であれば、一時よりも大きい、それを最後のセットは、かつてのリストを命じました。 } 他に { // 最後のリストは以下の一時以上である前に注文した場合、それは最後に設定された温度になります。 ARR [J] = TEMP; BREAK ; } } } } } VAR ARR = [5 ,. 3 ,. 1 ,. 6 ,. 7 ,. 4。]; 挿入ソート(ARR) はconsole.log(ARR)。
4.クイックソート(クイックソート):
参照番号として(そのようなシーケンスの最後のもののような)番号を選択し、全体は、数が他の部分よりも大きい数より1小さい二つの部分、に配列を命じ、その後、参照途中の数とは同じもの残りの配列を行いますソートが完了するまで
例えば:配列[5、7、2、3、6、4]
- (3、2)、4(7、6、5):4になるランキング、参照番号として選択
- (2、3)、4(7,6,5):3,2ため、得られたソートモードを使用し続けます
- (2、3)、4(5,6,7):7,6,5のために、得られたソートモードを使用し続けます
- ソート完了
機能クイック(ARR){ / * * * * @param {*} ARR * @param {*}スタートスタート添字 * @param {*}上付きエンド終わり * / 機能_quickSort(ARR、開始、終了){ IF([スタート]> [終了= ||スタート> arr.length - 1。)リターン; VARハイ=エンド、低=スタート; // 高い位置と設定 VARキー= [高] ARRを; // 設定された基準値は、最後の1にある 間(低< 高){ 一方(低<高&& ARR [低] <=キー)低++; // 値が低い近い上部に、基準値よりも低い場合 ARR [高] = ARR [低]; //値が基準値よりも低い、高のビット値、低いなく近い上部に発見された場合 、一方 high--(低<高&& ARR [高]> =キー); // ローは移動せず、高い場合基準値、高低近い、より大きい ARR [低] = ARR [高]; // 基準値よりも高い場合にクローズ処理、低い値は近くに配置しました。 } ARR [低] =キー; // 高い位置がローに等しい、基準値に変換します。 _quickSort(ARR、スタート、低- 1); // 環状高速ソート左に配列参照値 _quickSort(ARR ,. 1 +ハイ・エンド); // クイックの右側に配列基準値 } _quickSort(ARR、 0、ARR。 1長); } VARの ARR = [5 ,. 1 ,. 3,2 ,. 4 ,. 6。]; クイック(ARR) はconsole.log(ARR)