gpt4 book ai didi

javascript - 如何在 Node.js 上编写快速排序

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:56:31 24 4
gpt4 key购买 nike

我继续尝试在 Node.js 上编写算法,就像在算法书第 4 版中那样。塞奇威克,韦恩。那里有所有用 Java 编写的示例。

我有这个快速排序模块:

"use strict";

const _ = require('lodash');

module.exports = (function () {

function _partition(array, lo, hi) {
let i = lo;
let j = hi + 1;
let v = array[lo];

while (true) {
while (_less(array[++i], v)) {
if (i === hi) {
break;
}
}
while (_less(v, array[--j])) {
if (j === lo) {
break;
}
}
if (i >= j) {
break;
}
_exch(array, i, j);
}
_exch(array, lo, j);
return j;
}

function sort(array) {
_sort(array, 0, array.length - 1);
}

function _sort(array, lo, hi) {
if (hi <= lo) {
return null;
}

let j = _partition(array, lo, hi);

_sort(array, lo, j - 1);
_sort(array, j + 1, hi);
}

function _less(array, i, min) {
return array[i] < array[min];
}

function _exch(array, i, min) {
let temp = array[i];
array[i] = array[min];
array[min] = temp;
}

return {
sort: sort
};

})();

我使用 mocha 和 chai 来测试这个函数:

function isSorted(array) {
for(let i = 1, size = array.length; i < size; i++) {
if (array[i] < array[i-1]) {
return false;
}
}
return true;
}

和快速排序不起作用。我需要与书中相同的实现,但在 js 上。

您可以在此处查看原始实现:quick sort in java

最佳答案

那个实现很丑陋。

抱歉,我无法帮助您回答类(class)问题,但这就是快速排序的函数递归版本的美妙之处。永远不要在 javascript 中使用上面的代码。

在 ES6 中

功能递归快速排序。

const quicksort = ([head, ...tail]) => head === undefined ? [] : 
[...quicksort([...tail.filter(a => a <= head)]), head, ...quicksort([...tail.filter(a => a > head)])];

用法

console.log(quicksort([1,3,1,0,6,8,9,12,15,22,54, 111,12,2,3,4,5,6,7,-1]));

关于javascript - 如何在 Node.js 上编写快速排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35079453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com