Keito

© 2024 Keito

技術ブログとポートフォリオ

クイックソートアルゴリズム

分割統治法を使用した高速で実用的なソートアルゴリズムを学ぼう

O(n log n)
時間計算量(平均)
O(log n)
空間計算量
中級
難易度
ソート
カテゴリ

🔧 実行設定

配列:
[3, 6, 8, 10, 1, 2, 1]
要素数:
7
ピボット戦略:
末尾要素
ピボット選択戦略

アルゴリズムを実行してください

左側の設定パネルから条件を設定し、「クイックソート実行」ボタンを押してください

💻 実装例(JavaScript)

function quickSort(arr, low = 0, high = arr.length - 1) {
    if (low < high) {
        // パーティション操作:ピボットの正しい位置を見つける
        const pivotIndex = partition(arr, low, high);
        
        // ピボットの左側を再帰的にソート
        quickSort(arr, low, pivotIndex - 1);
        
        // ピボットの右側を再帰的にソート
        quickSort(arr, pivotIndex + 1, high);
    }
    return arr;
}

function partition(arr, low, high) {
    const pivot = arr[high]; // 末尾をピボットに選択
    let i = low - 1; // 小さい要素の境界
    
    for (let j = low; j < high; j++) {
        // 現在の要素がピボット以下の場合
        if (arr[j] <= pivot) {
            i++;
            [arr[i], arr[j]] = [arr[j], arr[i]]; // 交換
        }
    }
    
    // ピボットを正しい位置に配置
    [arr[i + 1], arr[high]] = [arr[high], arr[i + 1]];
    return i + 1; // ピボットの位置を返す
}

// 使用例
const unsortedArray = [3, 6, 8, 10, 1, 2, 1];
const sortedArray = quickSort([...unsortedArray]);
console.log(sortedArray); // [1, 1, 2, 3, 6, 8, 10]