JavaScriptで数値配列を偶数・奇数に分けて昇順ソートする方法
JavaScriptで数値の配列を受け取り、偶数をすべて昇順で先に並べ、その後に奇数をすべて昇順で並べるような関数を作成する必要があります。
入力例と期待される出力
たとえば、入力配列が以下だった場合を考えてみましょう。
const arr = [2, 5, 2, 6, 7, 1, 8, 9];
この場合、出力は次のようになります。
const output = [2, 2, 6, 8, 1, 5, 7, 9];
それでは、この関数を実装していきましょう。
実装コード
const arr = [2, 5, 2, 6, 7, 1, 8, 9];
// 偶数かどうかを判定する関数
const isEven = num => num % 2 === 0;
// ソート用の比較関数
const sorter = (a, b) => {
if(isEven(a) && !isEven(b)){
return -1;
};
if(!isEven(a) && isEven(b)){
return 1;
};
return a - b;
};
const oddEvenSort = arr => {
arr.sort(sorter);
};
oddEvenSort(arr);
console.log(arr);
出力結果
コンソールには次のように表示されます。
[ 2, 2, 6, 8, 1, 5, 7, 9 ]
コードの解説
このソート処理のポイントは、Array.prototype.sort() メソッドに渡す比較関数にあります。比較関数は以下のロジックで動作します。
- aが偶数でbが奇数の場合: -1 を返すことで、aをbより前に配置します。
- aが奇数でbが偶数の場合: 1 を返すことで、aをbより後ろに配置します。
- 両方が偶数、または両方が奇数の場合:
a - bの結果を返すことで、同じグループ内で数値の昇順に並べ替えます。
なお、JavaScriptの sort() メソッドは引数なしで呼び出すと要素を文字列として比較してしまうため、数値配列を正確にソートするには必ず比較関数を指定することが重要です。この手法を応用すれば、「特定の条件を満たす要素を優先的に並べる」といった柔軟なカスタムソートも簡単に実現できます。
-
JavaScriptで実装するマージソートとクイックソートの徹底解説
マージソート(Merge Sort)とは マージソートは、分割統治法(Divide and Conquer)に基づいたソートアルゴリズムです。最悪計算量は O(n log n) と非常に効率的ですが、その代償として追加の O(n) のメモリ領域が必要になるという特徴があります。 ここでは、このアルゴリズムを2つの関数、mergeSort と merge を作成して実装していきます。 merge(マージ) ― 2つの引数(部分的にソートされた2つの配列)を受け取り、要素を正しい順序で挿入しながら1つの配列に結合する関数です。 mergeSort(マージソート) ― 配列の左半分と右半分に対し
-
JavaScriptのArray.prototype.sort()メソッドの使い方をサンプルコードで解説
Array.prototype.sort()は、JavaScriptで配列の要素を並べ替えるための組み込みメソッドです。アルファベット順・数値順といった並び方に加えて、昇順・降順も自由に指定でき、配列操作の中でも特に使用頻度の高いメソッドの一つです。 ただし重要なポイントとして、sort()メソッドはデフォルトではすべての要素を文字列に変換してから比較します。そのため、数値の配列を意図したとおりに並べ替えたい場合は、比較関数を引数として渡す必要があります。 以下は、Array.prototype.sort()メソッドの基本的な使い方を示すサンプルコードです。 サンプルコード <!DOC