並び替えアルゴリズムのデモ|整列演算解法の実演

言語を切り替えると記憶域は初期化されてしまいます。
🙋取扱説明; 🌐表示言語: 🇯🇵日本語 |


📊 GRAPHICAL DEMONSTRATION
⚠️ Canvas(ES2015: ECMAScript 6th edition)に対応したウェブ・ブラウザーをお使いください。
#📌 これらの画面は、使用している機器端末にコピーし、ファイルとして保存できるでしょう。
📊 OTHER BUCKETS FOR EXTARNAL SORTS OR ANY
⚠️ Canvas(ES2015: ECMAScript 6th edition)に対応したウェブ・ブラウザーをお使いください。⚠️ Canvas(ES2015: ECMAScript 6th edition)に対応したウェブ・ブラウザーをお使いください。
🚩 PROGRESS AND RESULT OF THE DEMONSTRATION
📑 ADDITIONAL EXPLANATIONS FOR THE DEMONSTRATION
#📌 この体感表示速度は、各アルゴリズムの性能を表しているわけではありません。なぜなら、ここでの遅延は主にデータの交換やデータの移し替えの回数に基づいているからです。繰り返しLOOP(S)や、比較COMPARISON(S)、交換SWAP(S)、容器(記憶規模)BUCKET(S)、など様々な要素にも着目してみてください。
#📌 次の点にご注意ください。多くの一般的な記載物では、並び替え前のデータがすでに入っている元容器Nは、必要とされる記憶域に含まれていませんが、ここでの記憶域(記憶規模)は、この元容器Nを含めたものを、BUCKET(S)として表示しています。この元容器Nは、いつも必要とされるとは限らないでしょう。なぜなら、データはディスク上や、ネットワーク上、他にある可能性もあるからです。しかしながら、そのNは、ここに用意されている並び替えプログラムでは確実に主記憶上に存在し、領域を消費しています。
🚨 EMERGENCY STOP WHILE SORTING 
#📌 データ数を変更した後や、STOPボタンを押した後には、新しいデータを再度生成してください。(再生成せずに、別な、あるいは同じ並び替えの実演を継続することを妨げていませんが、その振る舞いは保証できません。)もし、このプログラムからの応答がなくなってしまった場合には、再開のために、もう一度STOPを押してみてください。(それでもダメだったら、ウェブ・ブラウザーで、プログラム・サイトを再読み込みしてください。😓😿)
🛠️ PREPARATION FOR A DATA SET
データ新規生成(標準的な整ったもの)
データ新規生成(種々雑多または奇妙なもの)
補足説明#📌 「様々雑多または奇妙なもの(MISCellaneous OR STRANGE DATA Sets)」は、同じ値を持つ棒が複数本あるかもしれない、あるいは欠けている(不連続な)値があるかもしれない、あるいはデータ数を超える非常に大きい値を持ったものです。
#📌 [R]印が付いたものは、降順(逆順;descending order)に並べられたものです。降順とは、値が大きいものから順に並べることで、ここでは上(左)から下(右)に向かって小さくなることを意味しています ⯆(⯈)。
#📌 [S]印が付いたものは、降順ですが、同じ値を持った(同じ長さの)棒同士では、IDは昇順(正順;ascending order)に並べられています。これは並び替えが安定(stable order)なものであるかを確認するのに役立ちます。安定とは、同じ値のもの同士では、並び替え前と後で順序が維持されることを意味しています。
#📌 [8]印が付いたものは、同じ値を持った(同じ長さの)棒同士では、IDは昇順に並べられています。これは並び替えが安定なものであるかを確認するのに役立ちます。
#📌 [A]印が付いたものは、昇順(正順;ascending order)に整列済みのものです。昇順とは、値が小さいものから順に並べることで、ここでは上(左)から下(右)に向かって大きくなるという意味です ⯅(⯇)。
#📌 実演を開始する前に、並び替えに使うデータを用意しましょう。
データ処理: [復元データ未保存] 
補足説明#📌 CLEAR_Mは、主画面のみ消します。データは消しません。CLEAR_3は、全3画面を消します。データは消しません。INITIALIZE、またはRESET_TO_DEFAULT_AND_GRADUALLY[R]は、データも消します。CLEAR_Cは、TRACEのためにコンソール画面を消します。データは消しません。
#📌 TRACEは、現在のデータ(値)の並べ替え過程を1000行以内でウェブブラウザーのコンソールに出力します。IMPORTは、指定するデータ(値)の並び順を取り込みます。EXPORTは、現在のデータ(値)の並び順をウィンドウ内に表示します。
#📌 BACKUPは、現在のデータ他を記憶します。RECOVERは、記憶したデータに戻します。
データ(棒)数: (2-1000);  簡易即時選択: 
描画域拡縮: [x0.5] (小)(大)
⚙️ CONTROLLER FOR THE DEMONSTRATION
描画域背景色: [BLACK] 
音響: [ON]  旋律見本確認: 
実演実行速度: [x1.0] (遅)(速)
データ追跡: [OFF] 
#📌 並び替え実演中でも変更できます。
🎬 START-UP A SORTING DEMONSTRATION
データ処理: [復元データ未保存] 
内部整列法: 
交換式:[A]: ||||||[D]: ||||||
補足説明#📌 SHAKERは、BUBBLE_UP+と、DOWN+とを組み合わせたものに相当します。
#📌 COMB3は、COMBの中で最も標準的なものとされるものです。
#📌 QUICK_Tの枢軸(pivot)は、上(左、前、天)側から選出されます。_Bは、下(右、後、底)側から選出されます。_Mは、中央から選出されます。_Xは、上と中央と下から最適なものが選出されます。Sは、再帰呼び出しの代わりに、スタックを使った整列法です。これもQUICKです。
挿入式:[A]: |[D]: |
補足説明#📌 SHELL3は、SHELLの中で最も標準的なものとされるものです。
選択式:[A]: ||[D]: ||
他:[A]: ||[D]: ||
補足説明#📌 SLOWやSTOOGEは、50以下のデータ数で行うことを強く推奨します。
外部整列法:
分布または分配式:[A]: ||[D]: 
併合式:[A]: [D]: 
他:[A]: [D]: 
補足説明#📌 BIN|BUCKETとCOUNTINGとBEADは、この実演用に改変された特別仕様ものです。
#📌 [S]印が付いたものは、並び替え順序が安定(stable order)なものです。安定とは、同じ値のもの同士では、並び替え前と後で順序が維持されることを意味しています。
#📌 [A]印が付いたものは、昇順(正順;ascending order)に並び替えるものです。昇順とは、値が小さいものから順に並べることで、ここでは上(左)から下(右)に向かって大きくなることを意味しています⯅(⯇)。通常は特に断りがない限り、この並びで整列します。
#📌 [D]印が付いたものは、降順(逆順;descending order)に並び替えるのものです。降順とは、値を大きいものから順に並べることで、ここでは上(左)から下(右)に向かって小さくなることを意味しています⯆(⯈)。
#📌 [B]印が付いたものは、下(右、後、底)部から上部へ向けて順に並び替えるものです。通常、並び替えは上(左、前、天)部からです。BUBBLE-DOWNは、[B]です。HEAPやPANCAKEやBEADは、[B]の方が一般的かもしれません。[W]は、上と下の両側から並び替えられるもので、SHAKERやDOUBLE_SELECTIONが、これに該当します。[X]は、スタックが最も浅いところから並び替えられるもので、いくつかのQUICKがこれに該当します。ときには、これらのQUICKや、SELCTIONは、実演の様子から[W]のように見えるかもしれません。それは、よくSHUFFLEされていない上下両端の棒の長さ(値)が大きく偏っているデータや、逆に並び替えられているデータを並び替えたときに見られます。
#📌 並び替えアルゴリズム(整列法)を、どれか1つ選んで開始させてください。


並び替えアルゴリズムのデモ|整列演算解法の実演


🐤 WARBLING
#📌 「SORTDEMO.BAS」というプログラムが印象に残っていました。それは、確か、Visual Basic for MS-DOSに付属していたものだったような気がします。そのような動く画面と音階による視聴覚的なプログラムを、身近な機器端末向けに、私も作ってみたいと思っていました(NEC PC9801シリーズ向けでなく)。いまなら、身近なものとしては、ウェブ・ブラウザーというものがあるじゃないですか。
#📌 このプログラムは、いろいろな並び替え(整列)プログラムと、ウェブ・インターフェース・プログラムとによって作られています。
📍#1: これらの多くの並び替えプログラムはC言語によるものですが、遠い昔に授業のために、すでに作られていたものです。そこで、それらはJavascriptで作り直されました。
📍#2: ウェブ・インターフェース・プログラムは、使用しているウェブ・ブラウザーが、HTML5によるWeb APIと、Web Audio APIを取り扱えることを前提にしています。Web APIは、DOM:Document Object Modelと、ES2015:ECMAScript 6th edition(Javascript)のことです。描画のための「Canvas」と、時間待機のための「Generator」は、ES2015によるものです。
#📌 そして、これらはHTMLとCSSとJavascriptを生成するC言語で書かれたCGIプログラムよって包括され、要求に応じて組み替えし、送信しています。
#📌 この開始時のデモ(実演)では、Google Chromeでは自動演奏指針により音は出ません(https://developer.chrome.com/blog/autoplay/#webaudio)。これは、Mozilla Firefoxに最適化されています。しかしながら、最近はFirefoxでも自動演奏は遮断されるようになりました(https://developer.mozilla.org/ja/docs/Web/Media/Autoplay_guide、2022年7月31日確認したところでは、この説明文の最終年月日は2022年1月21日とありましたが、この現象を確認したのはバージョン103で7月31日でした)。数日前まで音は出ていました。(あれ!?)
#📌 このプログラムによる音は不快なものであったり、高周波数域や低周波数域において音量が不十分なものであったりすることもあると思います。申し訳ありませんが、そのようなときには、「⚙️CONTROLLER FOR THE DEMONSTRATION」の「音響」で、どうか音を切(OFF)にしてください。
履歴
#📌 1.01版:2022.08.23;初公開版;
📍初期データ作成機能:RESET_TO_DEFAULT_AND_GRADUALLY[R], GRADUALLY[R], GRADUALLY[A], ODD-EVEN_BUMPY1, ODD-EVEN_BUMPY2, ODD-EVEN_CRESS1, ODD-EVEN_CRESS2, DOUBLE-DUPLICATION[R], DOUBLE-DUPLICATION[S], DOUBLE-DUPLICATION[A], TRIPLE-DUPLICATION[R], TRIPLE-DUPLICATION[S], TRIPLE-DUPLICATION[A], QUADRUPLE-DUPLICATION[R], QUADRUPLE-DUPLICATION[S], QUADRUPLE-DUPLICATION[A], QUINTUPLE-DUPLICATION[R], QUINTUPLE-DUPLICATION[S], QUINTUPLE-DUPLICATION[A], PRIME_NUMBERS[R], PRIME_NUMBERS[S], PRIME_NUMBERS[A], ALL_THE_SAME_HUGE_VALUES[8], 3LEVEL_WIDE_RANGE_VALUES[8], SINe_WAVE[8], COSine_WAVE[8], RANDOM_7LEVEL_VALUES[8], RECTANGULAR_PLUSE[8]
📍データ処理機能:INITIALIZE, SHUFFLE, REVERSE, RE_DRAW, CLEAR_M, CLEAR_3, CLEAR_C*, TRACE*, IMPORT*, EXPORT*, BACKUP, RECOVER
📍整列実演機能:EXCHANGE*, BUBBLE, SHAKER, GNOME, ODD-EVEN, SHEAR*, COMB, QUICK, INSERSION, SHELL, SELECTION, DOUBLE-SELECTION, HEAP, CYCLE*, PANCAKE, SLOW*, STOOGE*, BIN|BUCKET, COUNTING, RADIX, MERGE, BEAD*;これらは様々な変種を含んでいます。*は後の版で追加したものです。これらの整列法には、「?□sort」や、「?-sort」、「?sort」、「?□sorting」といった独特な命名がそれぞれにあるようです(https://en.wikipedia.org/wiki/Sorting_algorithm)。ここでの名称は「?□sort」に統一していますこと、考案者のみなさま、どうかお許しください。
#📌 1.02版:2022.08.26;追加と修正;[B]型と異なる上部から並べるHEAP整列法を追加しました。でも、まだ今ひとつ洗練されていません。CYCLEとSLOW整列法を追加しました。一部Javascript生成と説明を修正し改良しました。
#📌 1.03版:2022.08.28;追加と修正;真のEXCHANGEとBEADとSTOOGE整列法を追加しました。
#📌 1.04版:2022.09.01;改良と強化;説明を強化しました。BINとBEAD整列法を改良しました。
#📌 1.05版:2022.09.08;改良と修正と強化;説明を強化し修正しました。CGIを改良しました。
#📌 1.06版:2022.09.15;追加と修正と強化;SHEAR整列法を追加しました。線形の整列法だけでなく、このような2次元的なものも仲間に加えてみたかった。説明を強化し修正しました。
#📌 1.07版:2022.10.03;追加と改良;CLEAR_CとTRACEとIMPORTとEXPORT機能を追加しました。説明と表示の改良と、特に日本語の追加をしました。
#📌 1.08版:2022.12.02;改良;ヘルプ説明画面を追加しました。説明と表示の改良をしました。