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

JavaScript函数插入排序/函数未定义,javascript,arrays,sorting,Javascript,Arrays,Sorting,我正在尝试编写一个javascript文件,它有一个插入排序函数、一个检查排序数组并返回true或false的函数,以及一个从数组索引末尾到开头的插入排序函数。 这是我的密码 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-

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

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));
函数插入排序(arr){
对于(var i=1;i0&&arr[j-1]>val;j--){
arr[j]=arr[j-1];}arr[j]=val;}
}
函数反转插入排序(arr){
对于(变量i=arr.length;i>1;i--)
{var val=arr[i];var j;
对于(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=新数组();
for(设i=0;irr[i+1]){
//返回错误
//  }
//}
//返回真值}
var分拣机=插入分拣机(arr);
控制台日志(分拣机);
console.log(“并带有反向\n”);
var ReverseSortedar=reverseInsertionSort(arr);
控制台日志(反向选择器);
//控制台日志(分拣机(分拣机));

我现在遇到的问题是,当使用console.log输出时,sortedar是未定义的,问题似乎是我的函数是“未定义”的,但是看到我上面如何定义它,我不明白这是怎么回事。

您的insertionSort函数没有返回值,它修改作为参数传递的数组。不要调用
var-sortedar=insertionSort(arr)
,只需调用
insertionSort(arr)
,然后执行
console.log(arr)

您的insertionSort函数不返回值,而是修改作为参数传递的数组。只需调用
insertionSort(arr)
,然后执行
console.log(arr)
,而不是
var-sortedar=insertionSort(arr)
,您必须从函数返回arr。它没有返回任何东西,这就是为什么你没有定义

函数插入排序(arr){
对于(var i=1;i0&&arr[j-1]>val;j--){
arr[j]=arr[j-1];}arr[j]=val;}
返回arr;}
函数反转插入排序(arr){
对于(变量i=arr.length;i>1;i--)
{var val=arr[i];var j;
对于(j=i;j>0&&arr[j-1]>val;j--)
{arr[j]=arr[j-1];}arr[j]=val;
}返回arr}
var length=Math.floor(Math.random()*100)+1;
var arr=新数组();
for(设i=0;i//控制台日志(分拣机(分拣机))您必须从函数返回arr。它没有返回任何东西,这就是为什么你没有定义

函数插入排序(arr){
对于(var i=1;i0&&arr[j-1]>val;j--){
arr[j]=arr[j-1];}arr[j]=val;}
返回arr;}
函数反转插入排序(arr){
对于(变量i=arr.length;i>1;i--)
{var val=arr[i];var j;
对于(j=i;j>0&&arr[j-1]>val;j--)
{arr[j]=arr[j-1];}arr[j]=val;
}返回arr}
var length=Math.floor(Math.random()*100)+1;
var arr=新数组();
for(设i=0;i//控制台日志(分拣机(分拣机))确保从函数返回数组。由于您当前没有,将函数分配给变量不会产生任何特定值

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
}

函数插入排序(arr){
对于(var i=1;i0&&arr[j-1]>val;j--){
arr[j]=arr[j-1];
} 
arr[j]=val;
} 
返回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
}

函数插入排序(arr){
对于(var i=1;i0&&arr[j-1]>val;j--){
arr[j]=arr[j-1];
} 
arr[j]=val;
} 
返回arr
}

你的函数没有返回语句。这段代码的格式让我头疼。为什么在一行中有多条语句?你的函数没有返回语句。这段代码的格式让我头疼。为什么一行中有多条语句?谢谢!我已经有一段时间没用Javascript了,谢谢!我已经有一段时间没有使用JavaScription了。修改数组并返回它被认为是一种不好的做法。您应该返回一个新数组而不修改参数,或者修改参数。并非两者都有——这可能会导致严重的副作用。@U我们的赞助人,并会提出相反的建议。那是胡说八道。记录行为并返回引用(如果需要),这对于链接和其他公共语言模式很有用。修改数组并返回它被认为是一种不好的做法。您应该返回一个新数组而不修改参数,或者修改参数。并非两者都有——这可能会导致严重的副作用。@U我们的赞助人,并会提出相反的建议。那是胡说八道。记录行为并返回引用(如果需要),这对于链接和其他公共语言模式很有用。