クイックソート
サマリ
分割征服アルゴリズム.
1つの配列を基準として、2つの部分に分割され、1つの部分はpivotより小さく、もう1つの部分はpivotより大きく、その後、各部分を分割してソートし続けます.
プロセス
時間の複雑さ
Best Case: O(n log n)
Worst Case: O(n^2)
くうかんふくざつさ
長所
短所
コード実装
const pivot = (arr, start = 0, end = arr.length - 1) => {
function swap(arr, i, j) {
[arr[i], arr[j]] = [arr[j], arr[i]];
}
let pivot = arr[start]; // 가장 왼쪽을 기준으로 함
let pivotIdx = start;
for (let i = start + 1; i <= end; i++) {
if (pivot > arr[i]) {
pivotIdx++;
swap(arr, pivotIdx, i);
}
}
swap(arr, start, pivotIdx);
return pivotIdx;
};
const quickSort = (arr, left = 0, right = arr.length - 1) => {
if (left < right) {
let pivotIdx = pivot(arr, left, right);
// pivot은 고정이기 때문에 pivot에 -1, +1
quickSort(arr, left, pivotIdx - 1); // left
quickSort(arr, pivotIdx + 1, right); // right
}
return arr;
};
Reference
この問題について(クイックソート), 我々は、より多くの情報をここで見つけました https://velog.io/@highero-k/퀵-정렬-Quick-Sortテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol