JavaScriptベース-配列並び替えの6つの方法
4992 ワード
1.sort()
ソフト()はASCIIの文字順で、デフォルトの昇順です.
標準配列
隣の二つの数を一つずつ比較して、前の数が後の数より小さいなら、位置を交換します.
ポイント:交換プロセスは、変数が小さい値/大きな値を記憶する必要があります.
泡並べ替えの改良アルゴリズム.並べ替えは複数の比較と交換によって実現される.
ポイント:境界値を設定する必要があります.境界値によって配列を左右に分けます.そして左右で境界値と左右の部分を取る作業を繰り返します.
前のn−1の要素が順序付けされていると仮定して、n番目の要素を前の列に挿入します.
ポイント:順序配列の最後の位置を定義し、最後のビットから連続的に前の要素と比較し、挿入位置が見つかるまで.
ヒル順序付けは、記録を下付きの一定の増分パケットで、各グループに直接挿入順序付けアルゴリズムを使用して並べ替えます.
ヒルの並べ替えは、並べ替えアルゴリズムを挿入するより効率的な改良バージョンです.
並べ替えられるデータ要素の中から最小/最大の要素を選択して、シーケンスの開始位置に保存し、残りの並べ替えられていない要素の中から最小/最大要素を探して、並べ替えられたシーケンスの最後に置く.この類推により、並べ替え対象のデータ要素の個数がゼロになるまで.
計算回数は同じ配列
方法
回数を計算する
安定性
sort()
7
泡の並べ替え
20
安定している
クイックソート
10
不安定です
並べ替えの挿入
6
安定している
ヒルの並べ替え
6
不安定です
並べ替えを選択
10
不安定です
ソフト()はASCIIの文字順で、デフォルトの昇順です.
標準配列
//
var sum = 0;
var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
sum++;
return a - b;
});
console.log(numbers); // 1 2 3 4 5
console.log(sum); // 7
//
const months = ['March', 'Jan', 'Feb', 'Dec'];
months.sort();
console.log(months); // ['Dec', 'Feb', 'Jan', 'March']
配列オブジェクトvar student = [
{'name': 'jack', 'age': 18},
{'name': 'apple', 'age': 16},
{'name': 'tony', 'age': 30},
{'name': 'marry', 'age': 8},
]
//
student.sort(function (a, b) {
return (a.age - b.age)
});
//
student.sort(function (a, b) {
var nameA = a.name.toUpperCase();
var nameB = b.name.toUpperCase();
if (nameA < nameB) {
return -1;
}
if (nameA > nameB) {
return 1;
}
});
2.発泡体の並べ替え隣の二つの数を一つずつ比較して、前の数が後の数より小さいなら、位置を交換します.
ポイント:交換プロセスは、変数が小さい値/大きな値を記憶する必要があります.
var numbers = [4, 2, 5, 1, 3];
var sum = 0;
function bubbleSort (arr) {
let temp = '';
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length - 1; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
sum++;
}
}
return arr;
};
console.log(bubbleSort(numbers));
console.log(sum) // 20
3.快速並べ替え泡並べ替えの改良アルゴリズム.並べ替えは複数の比較と交換によって実現される.
ポイント:境界値を設定する必要があります.境界値によって配列を左右に分けます.そして左右で境界値と左右の部分を取る作業を繰り返します.
var numbers = [4, 2, 5, 1, 3];
var sum = 0;
function quickSort (arr) {
if (arr.length <= 1) {
return arr;
}
var medianIndex = Math.floor(arr.length / 2); //
var medianValue = arr.splice(medianIndex, 1); //
var left = [];
var right = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] < medianValue) {
left.push(arr[i])
} else {
right.push(arr[i])
}
sum++;
}
console.log(medianIndex, medianValue, left, right)
return quickSort(left).concat(medianValue,quickSort(right));
};
console.log(quickSort(numbers));
console.log(sum) // 10
4.並べ替えの挿入前のn−1の要素が順序付けされていると仮定して、n番目の要素を前の列に挿入します.
ポイント:順序配列の最後の位置を定義し、最後のビットから連続的に前の要素と比較し、挿入位置が見つかるまで.
var numbers = [4, 2, 5, 1, 3];
var sum = 0;
function insertSort(arr) {
//
for (let i = 1; i < arr.length; i++) {
if (arr[i] < arr[i - 1]) {
// i
var temp = arr[i];
//
var j = i - 1;
arr[i] = arr[j];
// , ,
while(j >= 0 && temp < arr[j]){
arr[ j+1 ] = arr[j];
j--;
sum++;
};
//
arr[ j+1 ] = temp;
}
}
}
console.log(insertSort(numbers));
console.log(sum) // 6
5.ヒルの並べ替えヒル順序付けは、記録を下付きの一定の増分パケットで、各グループに直接挿入順序付けアルゴリズムを使用して並べ替えます.
ヒルの並べ替えは、並べ替えアルゴリズムを挿入するより効率的な改良バージョンです.
var numbers = [4, 2, 5, 1, 3];
var sum = 0;
function shellSort(arr) {
var len = arr.length;
//
var fraction = Math.floor(len / 2);
// fraction = Math.floor(fraction / 2) =>
for (fraction; fraction > 0; fraction = Math.floor(fraction / 2)) {
//
for (var i = fraction; i < len; i++) {
//
for (var j = i - fraction; j >= 0 && arr[j] > arr[fraction + j]; j -= fraction) {
var temp = arr[j];
arr[j] = arr[fraction + j]; //
arr[fraction + j] = temp; //
sum++;
}
}
}
}
console.log(shellSort(numbers));
console.log(sum) // 6
6.並べ替えの選択並べ替えられるデータ要素の中から最小/最大の要素を選択して、シーケンスの開始位置に保存し、残りの並べ替えられていない要素の中から最小/最大要素を探して、並べ替えられたシーケンスの最後に置く.この類推により、並べ替え対象のデータ要素の個数がゼロになるまで.
var numbers = [4, 2, 5, 1, 3];
var sum = 0;
function selectionSort(arr) {
if (arr == null || arr.length < 2) {
return arr;
}
for (var i = 0; i < (arr.length - 1); i++) {
let minIndex = i;
for (let j = i + 1; j < arr.length; j++) {
minIndex = arr[j] < arr[minIndex] ? j : minIndex;
sum++;
}
let temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
return arr;
}
console.log(selectionSort(numbers));
console.log(sum) // 10
7.比較計算回数は同じ配列
[4, 2, 5, 1, 3]
の異なる方法で比較される.方法
回数を計算する
安定性
sort()
7
泡の並べ替え
20
安定している
クイックソート
10
不安定です
並べ替えの挿入
6
安定している
ヒルの並べ替え
6
不安定です
並べ替えを選択
10
不安定です