[アルゴリズム]ソート


優先順位付けアルゴリズムのタイプは次のとおりです.  Selection SortBubble SortQuick SortInsertion SortShell SortMerge SortHeap SortRadix Sortなどがあります.

運転方式別に分類


比較ソート(Comparent sort)と分散ソート(Distribute sort)があります.
  • は、比較する2つのキー値を一度に比較することによってソートを実行する.
  • これは、
  • 分布式ソートキー値を基準として、資料を複数の部分セットに分解し、各部分セットをソートして全体的にソートする方法である.
  • ソート位置別に分類


    内部ソート(internal sort)と外部ソート(external sort)があります.
  • 内部ソート
  • 並べ替え対象のデータをメインメモリに並べ替え、並べ替え速度は速いが、並べ替え可能なデータ量はメインメモリ容量によって制限される.
  • 交換方式(選択、Bubble、クイック)、挿入方式(Insertion、Shell)、連結方式(双方向連結、n路連結)、分配方式(Radix)、選択方式(Heap、Tree)など.
  • 外部ソート
  • は、並べ替えたいデータを補助メモリ上で並べ替える方式であり、大容量の補助メモリを使用しているため、内部並べ替えよりも速度が低いが内部並べ替えができない大容量データを並べ替えることができる.
  • マージ方式(双方向マージ、nパスマージ)があります.
  • ソートアルゴリズムの基礎

    泡の位置合わせ


    2つの隣接する要素の交換位置を比較します.
    昇順
    var bubbleSort = function(array) {
      var length = array.length;
      var i, j, temp;
      for (i = 0; i < length - 1; i++) { // 순차적으로 비교하기 위한 반복문
        for (j = 0; j < length - 1 - i; j++) { // 끝까지 돌았을 때 다시 처음부터 비교하기 위한 반복문
          if (array[j] > array[j + 1]) { // 두 수를 비교하여 앞 수가 뒷 수보다 크면
            temp = array[j]; // 두 수를 서로 바꿔준다
            array[j] = array[j + 1];
            array[j + 1] = temp;
          }
        }
      }
      return array;
    };
    
    bubbleSort([5,1,7,4,6,3,2,8]);
    コーディングテスト、初級、Bubbleソート、Bubble Sorting
    ZeroCho Blog

    速達


    分割征服を使用してソートする方法
    昇順
    const quickSort = function (arr) {
      if (arr.length <= 1) return arr; //나누고 나누다 배열이 1개가 되면 정렬할 필요 없으니 리턴
    
      const pivot = arr[0]; //피봇을 가장 첫번째 걸로...굳이? => start, end포인터를 안써서 그런가?
      const left = [];
      const right = [];
    
      for (let i = 1; i < arr.length; i++) { //배열 순회
        if (arr[i] <= pivot) left.push(arr[i]); //현재 인덱스의 값이 피봇보다 작거나 같다면 왼쪽(작은 것들)이 될 배열에 푸시
        else right.push(arr[i]);//피봇보다 크다면 오른쪽(큰 것들)이 될 배열에 푸시
      }
    
      const lSorted = quickSort(left);//나눠진 왼쪽 배열에서 다시 퀵소트
      const rSorted = quickSort(right);//나눠진 오른쪽 배열에서 다시 퀵소트
      return [...lSorted, pivot, ...rSorted];//정렬된 값들을 합쳐서 리턴
    };
    
    출처: https://im-developer.tistory.com/135 [Code Playground]
    テストエンコーディング、ベース、クイックソート、クイック起動、クイック起動
    [CS]Quick-sort with Hungarian (Küküllőmenti legényes) folk dance
    JavaScriptによる高速ソートアルゴリズム

    安定vs不安定

  • 安定
    ソート後も元の順序のソートを維持
  • 不安定
    ソート
  • では、ソート後も元の順序を維持することは保証されません.

    バブルソートは安定ソート、クイックコンポーネントは不安定ソート


    [アルゴリズム]-クイックソート(Quick sort)#6
    「≪アルゴリズム|Algorithm|oraolap≫」デフォルトのソート・アルゴリズムの比較|安定と不安定|位置と非位置|選択ソート(選択ソート)、バブルソート(バブルソート)、挿入ソート(挿入ソート)、連結ソート(連結ソート)、クイックソート(クイックソート)