JavaScript函数插入排序/函数未定义

时间:2019-02-07 03:08:20

标签: javascript arrays sorting

我正在尝试编写一个具有插入排序功能,检查已排序数组并返回true或false的函数的javascript文件,以及一个从数组索引的末尾到开头的插入排序函数。 这是我拥有的代码

function insertionSort(arr) { 
    for(var i = 1; i < arr.length; i++) { 
        var val = arr[i]; var j; for(j = i; j > 0 && arr[j-1] > val; j--) {
            arr[j] = arr[j-1]; } arr[j] = val; }
    }
function reverseInsertionSort(arr) { 
    for(var i = arr.length; i >1; i--) 
    { var val = arr[i]; var j;
        for(j = i; j > 0 && arr[j-1] > val; j--)
            { arr[j] = arr[j-1]; } arr[j] = val;
            } }
var length = Math.floor(Math.random()*100)+1;
var arr = new Array();
for(let i = 0; i < length; i++) {
  arr.push(Math.floor(Math.random()*10000)+1);
}
console.log(arr);
//function sortCheck(arr) {
//for( var i = 0 ; i < arr.length; i++){
//  if(arr[i]>rr[i+1]){
//      return false
//  }
//}
//return true}


var sortedArr = insertionSort(arr);
console.log(sortedArr);
console.log("And with reverse \n");
var reverseSortedArr = reverseInsertionSort(arr);
console.log(reverseSortedArr);
//console.log(sortCheck(sortedArr));

我现在遇到的问题是,在console.log输出时,sortedArr是未定义的,看来问题是我的函数是“未定义的”,但是看到我在上面如何定义它,我不知道那是什么。

3 个答案:

答案 0 :(得分:2)

您的insertSort函数不返回值,它修改了作为参数传递的数组。代替var sortedArr = insertionSort(arr),只需呼叫insertionSort(arr)然后执行console.log(arr)

答案 1 :(得分:0)

您必须从函数返回arr。它没有返回任何东西,这就是为什么您变得不确定的原因

function insertionSort(arr) { 
    for(var i = 1; i < arr.length; i++) { 
        var val = arr[i]; var j; for(j = i; j > 0 && arr[j-1] > val; j--) {
            arr[j] = arr[j-1]; } arr[j] = val; }
   return arr; }
function reverseInsertionSort(arr) { 
    for(var i = arr.length; i >1; i--) 
    { var val = arr[i]; var j;
        for(j = i; j > 0 && arr[j-1] > val; j--)
            { arr[j] = arr[j-1]; } arr[j] = val;
            } return arr}
var length = Math.floor(Math.random()*100)+1;
var arr = new Array();
for(let i = 0; i < length; i++) {
  arr.push(Math.floor(Math.random()*10000)+1);
}
console.log(arr);



var sortedArr = insertionSort(arr);
console.log(sortedArr);
console.log("And with reverse \n");
var reverseSortedArr = reverseInsertionSort(arr);
console.log(reverseSortedArr);
//console.log(sortCheck(sortedArr));

答案 2 :(得分:0)

确保从函数返回数组。由于您当前不在,将函数分配给变量不会产生任何特定值。

function insertionSort(arr) { 
    for(var i = 1; i < arr.length; i++) { 
        var val = arr[i]; 
        var j; 
        for(j = i; j > 0 && arr[j-1] > val; j--) {
            arr[j] = arr[j-1]; 
        } 
        arr[j] = val; 
     } 
    return arr
}