アルゴリズム(ソート)

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]];
      }
    }

リンクの説明追加するを参照してください

おすすめ

転載: blog.csdn.net/diaojw090/article/details/99858676