javascript - 快速排序问题 - 没有得到正确的结果
问题描述
我正在研究 HackerRank 上的Quicksort2问题。我无法弄清楚它希望我如何输出解决方案。
我试图在创建排序数组时对它们进行控制台记录,排序数组的数组和转换为字符串的数组数组。从 processData 函数返回似乎什么也没做。
function checkSort(arr) {
for (let i = 0; i < arr.length - 1; i++) {
if (arr[i] > arr[i + 1]) return false;
}
return true;
}
function processData(input) {
let sortedArrays = [];
quickSort(input);
function quickSort(input) {
if (input.length <= 1) return input;
let pivot = [input[0]];
let left = [], right = [];
for (let i = 1; i < input.length; i++) {
input[i] < pivot ? left.push(input[i]) : right.push(input[i]);
}
let newArr = quickSort(left).concat(pivot, quickSort(right));
if (checkSort(newArr)) sortedArrays.push(newArr);
return newArr;
}
console.log(sortedArrays);
}
我期待它与 HackerRank 的期望输出相匹配。
解决方案
您的实施存在几个问题:
以下是任务描述的引述:
在这个挑战中,每次分区方法完成时打印您的数组,即每当两个子数组以及枢轴合并在一起时。
但是,您正在尝试sortedArrays
为每个步骤打印最终排序的数组,而不是问题状态的子数组。newArr
因此,在返回之前打印子数组。不要忘记使用join
.
另一个引用:
将有两行输入:
数组的大小
数组的 n 个数字
您processData
需要一个解析的输入,也就是一个可以使用的数组。如果它接收到原始输入(2 行数据),那么它们应该被相应地解析。例如,它们可以被解析如下:
...
function processData(input) {
var lines = input.split('\n')
var len = lines[0]
var arr = lines[1].split(' ');
...
因此,您的固定代码可能如下所示:
function processData(input) {
var lines = input.split('\n')
var len = lines[0]
var arr = lines[1].split(' ');
quickSort(arr);
function quickSort(input) {
if (input.length <= 1) return input;
let pivot = [input[0]];
let left = [], right = [];
for (let i = 1; i < input.length; i++) {
input[i] < pivot ? left.push(input[i]) : right.push(input[i]);
}
let newArr = quickSort(left).concat(pivot, quickSort(right));
// print the subarray once the partitioning for this step has finished
console.log(newArr.join(' '))
return newArr;
}
}
推荐阅读
- php - Wordpress 问题:致命错误:未捕获错误:调用未定义函数
- javascript - 如何使用对象和键将数组组合到数组多维
- ios - 由于配置文件问题,无法构建/运行 Xcode 项目
- database - ArangoDB 图形查看器选项:使用多个属性的标签
- environment-variables - JNLP 应用程序为所有 System.getenv() 返回 NULL
- bash - 如何在多行中编写单行字符串?
- cpu-architecture - 为什么 LRU 实现在全关联 TLB 中很昂贵?
- java - Tomcat Https jks 文件错误:java.io.IOException: DerInputStream.getLength(): lengthTag=109, too big
- javascript - 将值从 JS 传递到 PHP
- python - Python正则表达式删除数字和周围的空间?