[アルゴリズム]5.クイックソート:クイックソート(Java)クイックソートJava


クイックソートは、基点としての基点を決定し、基点を基準にして大きな値を右に、小さな値を左側に位置合わせする方法です.

思考のロジック
  • の一番前をピボットに設定します.
  • 左メモリ
  • pivot未満の数
  • 右メモリ
  • pivotより大きい
  • 2,3再帰
  • を実行する.
  • の配列を統合します.
  • 実現は思ったより簡単です.
    集計ソートと似ているからかも?
    コード実装(Java)
    package algorithms.advancedsort;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class QuickSort {
        public ArrayList<Integer> sort(ArrayList<Integer> dataList) {
            if (dataList.size() <= 0) {
                return dataList;
            }
            Integer pivot = dataList.get(0);
    
            ArrayList<Integer> leftArr = new ArrayList<>();
            ArrayList<Integer> rightArr = new ArrayList<>();
    
            for (int index = 1; index < dataList.size(); index++) {
                if (pivot < dataList.get(index)) rightArr.add(dataList.get(index));
                else leftArr.add(dataList.get(index));
            }
    
            ArrayList<Integer> mergedArr = new ArrayList<>();
            mergedArr.addAll(this.sort(leftArr));
            mergedArr.addAll(List.of(pivot));
            mergedArr.addAll(this.sort(rightArr));
    
            return mergedArr;
        }
    
        public static void main(String[] args) {
            ArrayList<Integer> testData = new ArrayList<>();
    
            for (int index = 0; index < 100; index++) {
                testData.add((int) (Math.random() * 100));
            }
    
            System.out.println("TestData");
            System.out.println(testData);
            QuickSort quickSort = new QuickSort();
            System.out.println("sortedData");
            System.out.println(quickSort.sort(testData));
        }
    
    }
    
    悩みの部分
  • subList()を書くかどうか考え始めましたが、右から左へ簡単に実現しました.