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の古典的なアルゴリズムの予備的調査

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

...

人工知能を活用してビジネスを成長させ、企業価値を創造する方法

組織は、全員を関与させれば、AI を活用してビジネスを成長させることができます。人工知能への投資は、...

人工知能の応用シナリオは増加しており、徐々にさまざまな業界で必要なスキルになりつつあります。

[[250982]] 2015年以来、人工知能の概念は初めて提案されて以来、市場から高く評価されて...

Alibaba iDSTのビジュアルコンピューティング責任者、Hua Xiansheng氏:アルゴリズムの利点は消えつつある

「テクノロジー研究と現実世界の問題を組み合わせ、現実の問題を解決して価値を生み出すことにますます興味...

...

国勢調査ではAISのAIロボットが初めて「世帯内に入る」

「こんにちは、泰達街人口調査事務所です。」現在、第7回全国人口調査が盛んに行われている。天津浜海新...

...

...

今後5年間で働くのに適した5つの職種

「中国製造2025」という言葉を聞いたことがありますか。これは、中国が2025年までに産業の徹底的な...

AIは水産養殖業界に浸透しつつある。品質と効率性の向上に加え、人員の削減にもつながる。

[[264097]]この農場では、人工知能技術の活用により、人員が 3 分の 2 削減されました。...

人工知能について知っておくべきことすべて

人工知能は今日最も話題になっている技術の一つです。しかし、それは正確には何でしょうか?なぜ気にする必...

ネイチャーが中国のAIの現状を分析。2030年に世界をリードできるか?

ネイチャー誌の最近の分析記事では、中国の人工知能研究は質の面で急速な進歩を遂げているが、影響力の大き...

中国のLMM体格に適したベンチマークであるCMMMUがここにあります:30以上のサブ分野、12Kの専門家レベルの質問

近年、大規模マルチモーダルモデル (LMM) の機能が向上したため、LMM のパフォーマンスを評価す...

AI がソフトウェアをテストし、バグを修正できるようになれば、プログラマーの仕事は楽になるのでしょうか?

10月18日のニュース、単純な手作業から複雑な法的判断や医療診断まで、ロボットと人工知能が驚くべき...

トレーニングは不要、自動的にスケーラブルなビジュアルトランスフォーマーが登場

現在、ビジョントランスフォーマー (ViT) の分野には 2 つの大きな問題点があります。1. Vi...