JavaScriptで負の数と正の数を含む配列にバブルソートを実装する方法
バブルソートとは
バブルソート(Bubble Sort)は、隣り合う要素同士を比較し、順序が正しくなければ交換するという操作を繰り返すことで、配列を昇順(または降順)に並べ替えるシンプルなソートアルゴリズムです。計算量は O(n²) と効率は良くありませんが、仕組みが直感的で理解しやすいため、学習用のアルゴリズムとしてよく使われます。
ポイントは、負の数と正の数が混在していても問題なく動作するという点です。数値同士の大小比較(> 演算子)は符号に関係なく機能するため、特別な処理を追加する必要はありません。
ソート前の配列
ここでは、負の数と正の数が混ざった以下の未ソート配列を例にします。
var arr = [10, -22, 54, 3, 4, 45, 6];
この配列には -22 という負の数が含まれていますが、通常のバブルソートでそのまま並べ替えることができます。
実装コード
以下がバブルソートの実装例です。外側のループで比較範囲を後ろから狭めていき、内側のループで隣接する要素を順番に比較・交換します。
function bubbleSort(numberArray, size) {
for (var lastIndex = size - 1; lastIndex > 0; lastIndex--) {
for (var i = 0; i < lastIndex; i++) {
if (numberArray[i] > numberArray[i + 1]) {
var temp = numberArray[i];
numberArray[i] = numberArray[i + 1];
numberArray[i + 1] = temp;
}
}
}
return numberArray;
}
var arr = [10, -22, 54, 3, 4, 45, 6];
console.log(bubbleSort(arr, arr.length));コードの解説
外側のループ: 変数 lastIndex を配列の末尾から先頭に向かって減少させています。各周回が終わるごとに最大値が末尾に確定するため、比較範囲を1つずつ狭めていくことで無駄な比較を省いています。
内側のループ: 隣接する2つの要素 numberArray[i] と numberArray[i + 1] を比較し、前の要素が大きければ一時変数 temp を使って値を入れ替えます。この比較は符号に関係ないため、負の数も自動的に正しく配置されます。
プログラムの実行方法
上記のプログラムを実行するには、Node.jsを使って次のコマンドを実行します。
node fileName.js
ここでは、ファイル名を demo280.js として保存しています。
実行結果
コンソールには次のように出力されます。
PS C:\Users\Amit\javascript-code> node demo280.js
[
-22, 3, 4, 6,
10, 45, 54
]出力を見ると、-22 を含むすべての要素が小さい順に正しく並べ替えられていることがわかります。このように、バブルソートは負の数と正の数が混在する配列でも、標準的な比較演算子だけで問題なくソートできます。
-
JavaScript正規表現で数字(0〜9)を検索する方法
JavaScript正規表現で数字を検索するにはJavaScriptの正規表現で数字(0〜9)を検索するには、メタ文字「\d」を使用します。\d「\d」は文字クラス「[0-9]」と同じ意味を持ち、半角数字1文字にマッチします。末尾にグローバルフラグ「g」を付けることで、文字列内に含まれるすべての数字を一度に検索できます。サンプルコード以下のコードは、match()メソッドと正規表現「/\d/g」を組み合わせて、文字列からすべての数字を抽出して表示する例です。<html> <head> <title
-
JavaScriptで正と負の無限大(Infinity)の値を出力する方法
JavaScriptで扱える数値には上限があり、その範囲を超えた演算結果は特別な値「Infinity」(正の無限大)または「-Infinity」(負の無限大)として出力されます。この記事では、実際に正と負の無限大の値を画面に出力するサンプルコードを紹介します。 JavaScriptにおける無限大(Infinity)とは JavaScriptの数値型はIEEE 754で定められた倍精度浮動小数点数で、表現できる最大値は Number.MAX_VALUE(約1.79×10308)です。演算結果がこの最大値を超えると、エラーにはならずグローバルプロパティの Infinity が返されます。 正の方