1.配列オブジェクト:
this.tableDataArr = [{early_ratio:5,name:wang},{early_ratio:10,name:li},{early_ratio:20,name:chen}]
var objectArraySort = function (keyName) {
return function (objectN, objectM) {
var valueN = objectN[keyName]
var valueM = objectM[keyName]
if (valueN < valueM) return 1
else if (valueN > valueM) return -1
else return 0
}
}
this.tableDataArr.sort(objectArraySort('early_ratio'))
2.クイックソート
は、ソートによってソートされるデータを2つの独立した部分に分割し、一方の部分のすべてのデータが他方の部分のすべてのデータよりも小さい場合、この方法に従ってデータの2つの部分がすばやくソートされます。ソート全体このプロセスは再帰的に実行できるため、データ全体が順序付けられたシーケンスになります。
実装コード:
function quickSort(array) {
if (array.length < 2) {
return array;
}
const target = array[0];
const left = [];
const right = [];
for (let i = 1; i < array.length; i++) {
if (array[i] < target) {
left.push(array[i]);
} else {
right.push(array[i]);
}
}
return quickSort(left).concat([target], quickSort(right));
}
3.マージソート
このアルゴリズムは、分割統治の非常に典型的なアプリケーションです。(分割統治法は、問題を小さな問題に分割してから再帰的に解決しますが、ルールベースのフェーズでは、分割されたフェーズで得られた回答をまとめて「修正」します。つまり、分割統治法です)。
既存の順序付きサブシーケンスを組み合わせて、完全に順序付けられたシーケンスを取得します。つまり、最初に各サブシーケンスを順番に作成し、次にサブシーケンスを順番に作成します。2つの順序付きリストが順序付きリストにマージされる場合、双方向マージ
書き込み1と呼ばれます。
function mergeSort(array) {
if (array.length < 2) {
return array;
}
const mid = Math.floor(array.length / 2);
const front = array.slice(0, mid);
const end = array.slice(mid);
return merge(mergeSort(front), mergeSort(end));
}
function merge(front, end) {
const temp = [];
while (front.length && end.length) {
if (front[0] < end[0]) {
temp.push(front.shift());
} else {
temp.push(end.shift());
}
}
while (front.length) {
temp.push(front.shift());
}
while (end.length) {
temp.push(end.shift());
}
return temp;
}
書く2
function mergeSort(array, left, right, temp) {
if (left < right) {
const mid = Math.floor((left + right) / 2);
mergeSort(array, left, mid, temp)
mergeSort(array, mid + 1, right, temp)
merge(array, left, right, temp);
}
return array;
}
function merge(array, left, right, temp) {
const mid = Math.floor((left + right) / 2);
let leftIndex = left;
let rightIndex = mid + 1;
let tempIndex = 0;
while (leftIndex <= mid && rightIndex <= right) {
if (array[leftIndex] < array[rightIndex]) {
temp[tempIndex++] = array[leftIndex++]
} else {
temp[tempIndex++] = array[rightIndex++]
}
}
while (leftIndex <= mid) {
temp[tempIndex++] = array[leftIndex++]
}
while (rightIndex <= right) {
temp[tempIndex++] = array[rightIndex++]
}
tempIndex = 0;
for (let i = left; i <= right; i++) {
array[i] = temp[tempIndex++];
}
}
4.挿入ソート
function insertSort(array) {
for (let i = 1; i < array.length; i++) {
let target = i;
for (let j = i - 1; j >= 0; j--) {
if (array[target] < array[j]) {
[array[target], array[j]] = [array[j], array[target]]
target = j;
} else {
break;
}
}
}
return array;
}
5.バブルソート
配列をループし、現在の要素と次の要素を比較します。現在の要素が次の要素よりも大きい場合は、上向きにバブルします。
このようなループの後の最後の番号は、この配列の最大の番号です。
次回ループが上記の操作を続行するとき、ソートされた番号はループされません。
最適化:ループにバブリングがない場合は、並べ替えが完了し、ループが停止していることを意味します。
function bubbleSort(array) {
for (let j = 0; j < array.length; j++) {
let complete = true;
for (let i = 0; i < array.length - 1 - j; i++) {
// 比较相邻数
if (array[i] > array[i + 1]) {
[array[i], array[i + 1]] = [array[i + 1], array[i]];
complete = false;
}
}
// 没有冒泡结束循环
if (complete) {
break;
}
}
return array;
}
6.並べ替えの選択
各サイクルで最小の番号が選択され、前の順序の順序に配置されます。
function selectionSort(array) {
for (let i = 0; i < array.length; i++) {
let minIndex = i;
for (let j = i + 1; j < array.length; j++) {
if (array[j] < array[minIndex]) {
minIndex = j;
}
}
[array[minIndex], array[i]] = [array[i], array[minIndex]];
}
}