【发布时间】:2016-08-25 23:18:06
【问题描述】:
我正在 JS 中处理这个 hackerrank challenge 并且我正在实现插入排序。使用我的解决方案,它适用于较小的数组,但不适用于具有 100 多个索引的较大数组。我无法弄清楚为什么我的实现不起作用。我在互联网上搜索过,大多数插入排序的实现与我的相同。这是我正在使用的代码:
function processData(input) {
//Enter your code here
input = input.split("\n");
var array = input[1].split(" ");
insertionSort(array);
}
function insertionSort(array){
for(var i=1; i<array.length; i++){
for(var j=i; j>0; j--){
if(array[j-1] > array[j]){
var temp = array[j-1];
array[j-1] = array[j];
array[j] = temp;
}
}
console.log(array.toString().replace(/,/g," "));
}
}
编辑:这是一个函数排序失败的例子。
输入:
406 157 415 318 472 46 252 187 364 481 450 90 390 35 452 74 196 312 142 160 143 220 483 392 443 488 79 234 68 150 356 496 69 88 177 12 288 120 222 270 441 422 103 321 65 316 448 331 117 183 184 128 323 141 467 31 172 48 95 359 239 209 398 99 440 171 86 233 293 162 121 61 317 52 54 273 30 226 421 64 204 444 418 275 263 108 10 149 497 20 97 136 139 200 266 238 493 22 17 39
输出:
10 103 108 117 12 120 121 128 136 139 141 142 143 149 150 157 160 162 17 171 172 177 183 184 187 196 20 200 204 209 22 220 222 226 233 234 238 239 252 263 266 270 273 275 288 293 30 31 312 316 317 318 321 323 331 35 356 359 323 319 390 392 344 444 450 452 444 472 484 484 481 481 484 484 484 481 484 481 493 493 493 493 484 493 494 484 493 496 497 5254 614S 64 64 79 88 69 74 79 86 88 88 80 95 97 99
【问题讨论】:
-
你能提供一个失败的例子吗?
-
仔细观察你的内部 for 循环。它包含一个 if 语句。您是否会期望 if 语句在循环的某些迭代中为真,然后在某些迭代中为假,然后再次为真的情况发生?或者你会期望一旦 if 语句开始返回 false,它就再也不会返回 true?
-
不是你在排序字符串的问题吗?
-
@Hamms 我不确定我是否在关注,抱歉我的大脑在试图弄清楚这一点后有点糊涂。
-
@jeffcarey 你是对的。我将 if 语句更改为解析双方的 int 并且它起作用了。没有意识到这一点,我感到很愚蠢。
标签: javascript algorithm sorting