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

推薦する

清華大学、マイクロソフトなど大学がリマインダーエンジニアを排除? LLMと進化的アルゴリズムを組み合わせて強力なプロンプト最適化ツールを作成する

LLM の機能と従来のアルゴリズムを組み合わせることで、どのような火花が生まれるのでしょうか?清華大...

...

Java から MySQL に接続するためのベストプラクティスを解読: 自分に合った方法を選択する

MySQL への接続は、Java 開発において非常に一般的なタスクの 1 つです。次のセクションでは...

サーバーが過負荷状態です! GANで生成された肖像油絵は人気があり、一瞬でルネッサンス時代に戻ることができます

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

超人気のミニGPT-4は視覚機能が急増し、GitHubでは2万個のスターを獲得し、中国のチームによって制作されています

ターゲット検出用のGPT-4V?ネットユーザーの実地テスト:まだ準備ができていません。検出されたカテ...

ドローンは緊急通信の発展に役立ちますが、この3つのポイントが重要です。

近年、インターネットの急速な発展に伴い、通信ニーズが継続的に高まり始めており、通信保証能力がますます...

インテリジェント運転システムの欠陥解決策の詳細な分析

従来の自動車と比較して、自動運転車は、車両が乗客を安全に目的地まで輸送できるかどうかという実用的な目...

百度の主任科学者アンドリュー・ン氏が辞任を発表

[[186234]] 3月22日、百度のトップ科学者アンドリュー・ン氏は、英語のセルフメディアプラッ...

生成型人工知能が経済と社会に与える影響

生成アルゴリズム、事前トレーニング済みモデル、マルチモーダルなどの技術の累積的な統合と反復を経て、人...

...

...

...

2018 年最も注目された AI および機械学習のスタートアップ 10 社

PwCとCB Insightsによるマネーツリーのレポートによると、人工知能のスタートアップへの投資...

...

デジタルツインがグローバルサプライチェーンの悪夢からの脱出にどのように役立つか

編集:王昊、千山企画丨張傑新型コロナウイルス感染症の世界的大流行の発生と拡大により、過去2年間にわた...