JavaScript におけるいくつかの一般的なソートアルゴリズムの共有

JavaScript におけるいくつかの一般的なソートアルゴリズムの共有

説明する

各ブラウザテストから取得されるデータは異なります。たとえば、Chrome を使用してテストする場合、通常はクイック ソートが最も高速ですが、配列の長さによっては IE でシェル ソートが最も高速になる場合があります。

バブルソートをテストするためにあまり多くのデータを使用しないこと(ブラウザがクラッシュしてもかまいません)

個人的な理解

バブルソート: 最も単純で最も遅い。長さは 7 未満であると思われる***

挿入ソート: バブルソートより高速、クイックソートやシェルソートより低速、小さいデータに有利

クイック ソート: これは非常に高速なソート方法です。V8 のソート方法では、クイック ソートと挿入ソートを組み合わせて使用​​します。

シェルソート: Chrome以外では配列の長さが1000未満の場合、シェルソートはクイックソートよりも高速です。

· システム方式: この方法はForfoxでは非常に高速です

  1. // ---------- いくつかのソートアルゴリズム
  2. // jsはソートにsortを使用します
  3. システムソート:関数(配列){
  4. 配列を返します。sort(function(a, b){
  5. a - b を返します。
  6. });
  7. },
  8. // バブルソート
  9. バブルソート:関数(配列){
  10. var i = 0 len =配列の長さ、
  11. j、d;
  12. for(; i < len ; i++){
  13. ( j = 0 ; j < len ; j++){
  14. if(配列[i] <  配列[j]){
  15.                      d =配列[j];
  16. 配列[j] = 配列[i];
  17. 配列[i] = d;
  18. }
  19. }
  20. }
  21. 配列を返します。
  22. },
  23. // クイックソート
  24. クイックソート:関数(配列){
  25. //var配列= [8,4,6,2,7,9,3,5,74,5];
  26. //var配列=
    [0,1,2,44,4,324,5,65,6,6,34,4,5,6,2,43,5,6,62,43,5,1,4,51,56,76,7,7,2,1,45,4,6,7];
  27. var i = 0 ;
  28. var j =配列の長さ- 1;
  29. varソート=関数(i, j) {
  30.               
  31. // 終了条件
  32. i == jの場合、戻り値:
  33.               
  34. varキー=配列[i];
  35. var tempi = i; // 記録開始位置
  36. var tempj = j; // レコード終了位置
  37.               
  38. while(j > i){
  39. // j << --------------前方検索
  40. if(配列[j] > = キー){
  41. j--;
  42. }それ以外{
  43. 配列[i] = 配列[j]
  44. //i++ ------------- > >後方検索
  45. while(j > ++i){
  46. if(配列[i] >キー){
  47. 配列[j] = 配列[i];
  48. 壊す;
  49. }
  50. }
  51. }
  52. }
  53.               
  54. // 最初に取り出したキーが最小の数字の場合
  55. if( tempi == i){
  56. ソート(++i, tempj);
  57. 戻る ;
  58. }
  59.               
  60. //***キー用に1つの空きスペースが予約されています
  61. 配列[i] = キー;
  62.               
  63. // 再帰
  64. ソート(tempi, i);
  65. ソート(j, tempj);
  66. }
  67.           
  68. ソート(i, j);
  69.           
  70. 配列を返します。
  71. },
  72.       
  73. // 挿入ソート
  74. 挿入ソート:関数(配列){
  75.           
  76. // http://baike.baidu.com/image/d57e99942da24e5dd21b7080
  77. // http://baike.baidu.com/view/396887.htm
  78. //var配列=
    [0,1,2,44,4,324,5,65,6,6,34,4,5,6,2,43,5,6,62,43,5,1,4,51,56,76,7,7,2,1,45,4,6,7];
  79.           
  80. var i = 1 , j, temp, キー,
  81.              len =配列の長さ;
  82.           
  83. (; i <   len ; i++){
  84.               
  85.             温度= j = i;
  86.             キー=配列[j];
  87.               
  88. while(--j > -1){
  89. if(配列[j] >キー){
  90. 配列[j+1] = 配列[j];
  91. }それ以外{
  92. 壊す;
  93. }
  94. }
  95.               
  96. 配列[j+1] = キー;
  97. }
  98.           
  99. 配列を返します。
  100. },
  101.       
  102. // シェルソート
  103. //Jun.array.shellSort(Jun.array.df(10000));
  104. shellSort:関数(配列){
  105.  
  106. // http://zh.wikipedia.org/zh/%E5%B8%8C%E5%B0%94%E6%8E%92%E5%BA%8F
  107. // var配列= [13,14,94,33,82,25,59,94,65,23,45,27,73,25,39,10];
  108.           
  109. var tempArr = [1750, 701, 301, 132, 57, 23, 10, 4, 1];
  110. // 逆方向() Wikipediaの***ステップサイズを参照 配列が小さい
  111. //var tempArr = [1031612713, 217378076, 45806244,
  112. 9651787、2034035、428481、90358、19001、4025、836、182、34、9、1]
  113. //大きな配列のステップサイズの選択
  114. var i = 0 ;
  115. var tempArr tempArrLength = tempArr.length;
  116. var len =配列の長さ;
  117. var len2 = parseInt (len/2);
  118.           
  119. for(;i <   tempArrLength ; i++){
  120. if(tempArr[i] > len2){
  121. 続く;
  122. }
  123.               
  124. tempSort(tempArr[i]);
  125. }
  126.  
  127. // ステップをソートする
  128. 関数 tempSort(temp){
  129.               
  130. //console.log(temp) 使用されたステップ統計
  131.               
  132. var i = 0 j = 0 、 f、用語、キー;
  133. var tempLen = len %temp > 0 ? parseInt(len/temp) + 1 : len/temp;
  134.               
  135.               
  136. for(;i <   temp ; i++){// 列を循環する
  137.  
  138. j = 1 ;/*j <   tempLen && */temp * j + i <   len ; j++){
    //各列の各行をループする
  139.                      tem = f = temp * j + i;
  140.                     キー=配列[f];
  141.  
  142. while(( tem- = temp ) > = 0){
  143. // 上方向に順番に検索
  144. if(配列[tem] >キー){
  145. 配列[tem+temp] = 配列[tem];
  146. }それ以外{
  147. 壊す;
  148. }
  149. }
  150.                       
  151. 配列[tem + temp] = キー;
  152.                       
  153. }
  154. }
  155.               
  156. }
  157.           
  158. 配列を返します。
  159.           
  160. }

オリジナルリンク: http://www.cnblogs.com/idche/archive/2011/02/16/1956397.html

【編集者のおすすめ】

  1. 10 の素晴らしい HTML5 と JavaScript エフェクト
  2. JavaScript オブジェクトと継承のチュートリアル: 組み込みオブジェクト
  3. JavaScript メモリリサイクルメカニズムの詳細な解釈
  4. JavaScript初心者が注意すべき7つのポイント
  5. 私は10年間JavaScriptを書いてきましたが、連続代入演算を完全に理解していないかもしれません。

<<:  PHP 5 におけるガベージコレクションアルゴリズムの進化についての簡単な説明

>>:  データマイニングにおける10の古典的なアルゴリズムの予備的調査

ブログ    
ブログ    

推薦する

...

...

NetEase MediaのLiu Yandong氏:AIは読者にパーソナライズされたコンテンツをタイムリーに提供します

【51CTO.comオリジナル記事】 2017年12月1日から2日まで、51CTO主催のWOTDグロ...

機械学習における次元削減とは何ですか?

【51CTO.com クイック翻訳】機械学習アルゴリズムは、数十行の表や数百万ピクセルの画像など、...

AI時代に医療データの品質が重要な理由

効果的な医療データ分析においては、データの品質は主観的なものになります。データから得られる情報の正確...

アルゴリズムを使って従業員を解雇する人工知能は、労働者の新たなリーダーになったのだろうか?

最近、外国メディアのゲームワールドオブザーバーは、ロシアのオンライン決済サービス企業エクソラがアルゴ...

両国の自動運転車に対する信頼度は大きく異なる。アメリカ人の70%が反対、中国人の70%が支持

テクノロジー・トラベラー、北京、12 月 27 日: AI 開発に関する最近の調査、研究、予測、その...

コンテキスト化によって生成型AIの可能性を解き放つ方法

生成型人工知能 (GenAI) が驚異的なスピードで進歩するにつれ、その真の価値を活用したい企業にと...

「CNNの父」ヤン・ルカン氏:人工知能には脳がなく、そのIQは犬ほど高くない

ビッグデータダイジェスト制作ディープラーニングの三大巨頭の一人として知られるヤン・ルカン氏は、常に楽...

...

人工知能統計調査:消費者の86%が手動の顧客サービスを好む

AI の健全性と進歩に関する最近の調査、研究、予測、その他の定量的評価では、米国の消費者がチャットボ...

今年の春節旅行は異例、テクノロジーが鍵

今年も春節の旅行シーズンがやってきましたが、今年は明らかに例年とは違います。今年は、感染症予防・抑制...

中国は5GやAIなどの分野で米国に追いつきつつあるが、設備や技術は依然として遅れている

米国のエレクトロニクス業界向け戦略コンサルティング会社、インターナショナル・ビジネス・ストラテジーズ...

...

OpenAI、開発者向けGPTチャットボットAPIのメジャーアップデートを発表、価格を値下げ

6月14日、OpenAIは大規模言語モデルAPI(GPT-4およびgpt-3.5-turboを含む)...