JavaScriptでバブルソートを使いこなす初心者のためのガイド
初心者プログラマーとして、「ソートアルゴリズム」という言葉を聞いたことがあるかもしれませんが、それが何であるかやどのように機能するかわからないかもしれません。それでは恐れることはありません!この記事では、最も基本的なソートアルゴリズムの1つであるバブルソートを掘り下げます。
しかし、バブルソートがどのように機能するかを見ている前に、まずそれが何であるかを定義しましょう。簡単に言えば、バブルソートは、配列内の隣り合った要素を比較し、それらが正しい順序でない場合はそれらの位置を入れ替えるアルゴリズムです。これを配列が完全にソートされるまで続けます。
これでバブルソートの基本的な理解ができたので、例を使ってその方法を見てみましょう。数字の配列を最小から最大まで並べ替える必要があるとします:[5, 2, 1, 4, 3]
。
バブルソートを使用すると、最初に最初の2つの要素、5と2を比較します。5が2より大きいので、それらの位置を入れ替えます。配列は次のようになります:[2, 5, 1, 4, 3]
。
次に、2番目と3番目の要素、5と1を比較します。5が1より大きいので、それらの位置を入れ替えます。配列は次のようになります:[2, 1, 5, 4, 3]
。
このプロセスを配列の終わりまで続けます。最後のステップは、4番目と5番目の要素、4と3を比較することです。4が3より大きいので、それらの位置を入れ替えます。最終的な、並べ替えられた配列は次のようになります:[1, 2, 3, 4, 5]
。
以上が、バブルソートがどのように機能するかをよりよく理解するためのものです。次に、JavaScriptでこのアルゴリズムを実用的な方法で使用するいくつかの例を見てみましょう。
例
名前をアルファベット順に並べ替える
const sortNames = names => {
for (let i = 0; i < names.length; i++) {
for (let j = 0; j < names.length - i - 1; j++) {
if (names[j] > names[j + 1]) {
// Swap names[j] and names[j + 1]
let temp = names[j];
names[j] = names[j + 1];
names[j + 1] = temp;
}
}
}
return names;
};
const names = ['John', 'Bob', 'Sue', 'Alice', 'Zack'];
console.log(sortNames(names)); // ['Alice', 'Bob', 'John', 'Sue', 'Zack']
数字を最小から最大まで並べ替える
const sortNumbers = numbers => {
for (let i = 0; i < numbers.length; i++) {
for (let j = 0; j < numbers.length - i - 1; j++) {
if (numbers[j] > numbers[j + 1]) {
// Swap numbers[j] and numbers[j + 1]
let temp = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = temp;
}
}
}
return numbers;
};
価格で製品を並べ替える
const sortProducts = products => {
for (let i = 0; i < products.length; i++) {
for (let j = 0; j < products.length - i - 1; j++) {
if (products[j].price > products[j + 1].price) {
// Swap products[j] and products[j + 1]
let temp = products[j];
products[j] = products[j + 1];
products[j + 1] = temp;
}
}
}
return products;
};
const products = [ { name: 'Product A', price: 9.99 }, { name: 'Product B', price: 7.99 }, { name: 'Product C', price: 12.99 }];
console.log(sortProducts(products));
// [{ name: 'Product B', price: 7.99 }, { name: 'Product A', price: 9.99 }, { name: 'Product C', price: 12.99 }]
役職で従業員を並べ替える
const sortEmployees = (employees) => {
for (let i = 0; i < employees.length; i++) {
for (let j = 0; j < employees.length - i - 1; j++) {
if (employees[j].jobTitle > employees[j + 1].jobTitle) {
// Swap employees[j] and employees[j + 1]
let temp = employees[j];
employees[j] = employees[j + 1];
employees[j + 1] = temp;
}
}
}
return employees;
};
const employees = [
{ name: "John", jobTitle: "Manager" },
{ name: "Sue", jobTitle: "Developer" },
{ name: "Alice", jobTitle: "Designer" },
{ name: "Bob", jobTitle: "Salesperson" },
];
console.log(sortEmployees(employees));
// [
// { name: 'Alice', jobTitle: 'Designer' },
// { name: 'Sue', jobTitle: 'Developer' },
// { name: 'John', jobTitle: 'Manager' },
// { name: 'Bob', jobTitle: 'Salesperson' }
// ]
人口で都市を並べ替える
const sortCities = (cities) => {
for (let i = 0; i < cities.length; i++) {
for (let j = 0; j < cities.length - i - 1; j++) {
if (cities[j].population > cities[j + 1].population) {
// Swap cities[j] and cities[j + 1]
let temp = cities[j];
cities[j] = cities[j + 1];
cities[j + 1] = temp;
}
}
}
return cities;
};
const cities = [
{ name: "New York", population: 8175133 },
{ name: "Los Angeles", population: 3792621 },
{ name: "Chicago", population: 2695598 },
{ name: "Houston", population: 2130332 },
];
console.log(sortCities(cities));
// [
// { name: 'Houston', population: 2130332 },
// { name: 'Chicago', population: 2695598 },
// { name: 'Los Angeles', population: 3792621 },
// { name: 'New York', population: 8175133 }
// ]
バブルソートのパフォーマンスと制限
いくつかのJavaScriptでバブルソートを使用する実用的な例を見ましたので、このアルゴリズムのパフォーマンスと制限について話してみましょう。
バブルソートの主な制限の1つは、その時間複雑度です。具体的には、バブルソートはO(n^2)
のタイムコンプレックスを持ち、入力のサイズが増加するにつれて、より遅くなります。これは、大きなリストを整列するためのより効率的なオプションではありません。
ただし、バブルソートにはいくつかの利点があります。これは、単純で理解しやすいアルゴリズムであり、初心者向けの良い選択肢です。また、等しいキーを持つ要素の相対順序を保存する、安定したソートであることも特徴です。
結論
結論として、バブルソートは、小さなリストを整列するのに役立つ単純で理解しやすいアルゴリズムです。大きなリストを整列するための最も効率的なアルゴリズムではありませんが、特定の状況ではまだ便利なツールとして活用できます。このアルゴリズムを使用するかどうかを決定する際には、時間複雑度を心に留めることを忘れないでください。
Mình hy vọng bạn thích bài viết này và học thêm được điều gì đó mới.
Donate mình một ly cafe hoặc 1 cây bút bi để mình có thêm động lực cho ra nhiều bài viết hay và chất lượng hơn trong tương lai nhé. À mà nếu bạn có bất kỳ câu hỏi nào thì đừng ngại comment hoặc liên hệ mình qua: Zalo - 0374226770 hoặc Facebook. Mình xin cảm ơn.
Momo: NGUYỄN ANH TUẤN - 0374226770
TPBank: NGUYỄN ANH TUẤN - 0374226770 (hoặc 01681423001)
All rights reserved