笔记 原地快排 js实现

276 阅读1分钟

一个非常简单的版本,没有实现找中位数,直接将第一个元素作为枢纽元素

function partion(arr, l, r) {
    let i = l + 1 // 将第一个元素作为枢纽元素
    let j = r
    if (l >= r) return
    while (i < j) {
        while (arr[i] < arr[l] && i < r) {
            i++
        }
        while (arr[j] > arr[l] && j > l) {
            j--
        }
        if (i >= j) break
        swap(arr, i, j)

        i++
        j--
    }
    swap(arr, j, l) // 交换完之后j<i
    partion(arr, l, j - 1);
    partion(arr, j + 1, r);
}

function swap(arr, i, j) {
    let temp = arr[i]
    arr[i] = arr[j]
    arr[j] = temp
}

// 今天手撕的时候,漏掉了i++ j--