使用Javascript从右向左进行插入排序

使用Javascript从右向左进行插入排序,javascript,arrays,sorting,insertion-sort,Javascript,Arrays,Sorting,Insertion Sort,我正在尝试编写一个从右向左的插入排序函数。 不是按降序排列的。我只是不明白为什么这个代码不能正确地对数字进行排序 function reverseInsertionSort(arr) { for(var i = arr.length -1; i >0; i--) var val = arr[i]; var j; for(j = i; j > 0 && arr[j-1] < val; j--) { arr[j-1] = arr[

我正在尝试编写一个从右向左的插入排序函数。 不是按降序排列的。我只是不明白为什么这个代码不能正确地对数字进行排序

function reverseInsertionSort(arr) { 
for(var i = arr.length -1; i >0; i--) 
var val = arr[i];
    var j;
    for(j = i; j > 0 && arr[j-1] < val; j--) {
        arr[j-1] = arr[j]; }
     va=arr[j]; }
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; }
    }
            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);
}
var arr2= arr.slice();

reverseInsertionSort(arr2);
console.log(arr2)
它未排序,输出以未定义结尾。 arr用于测试insertionsort fun
乐于接受建设性的批评

应该从最后一个元素即len-1开始外循环。由于外部循环从arr.length开始,因此创建了数组的未定义成员。 试试这个:

function insSort(arr){
  for(var i=arr.length-1;i>=0;i--){
    key=arr[i];
    j=i+1;
    while(j<arr.length&&arr[j]<=key){
      arr[j-1]=arr[j];
      j++;
    }
    arr[j-1]=key;
  }
}
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);
insSort(arr);
console.log(arr);
这会奏效的

function reverseInsertionSort(arr) { 

    for(var i = arr.length-2; i>=0; i--) {

        var value = arr[i];
        var j;

        for(j = i; ((j < arr.length) && (arr[j+1] > value)); j++){ 
            arr[j] = arr[j+1]; 
        } 
        arr[j] = value;
    }
    return arr;
}

//test
var inputArray = [3,2,4,5,1,10,23];
var resultArray = reverseInsertionSort(inputArray);
console.log(resultArray); //[23, 10, 5, 4, 3, 2, 1]

可能重复的我有一个插入排序。它工作正常,从左到右。我正试图做同样的事情,但从另一方面来说,你说欢迎批评。。。对我来说,这种代码看起来很小。吓人的是,我永远不会回顾它们。也许可以让这些单字符变量更具描述性。一行或两行注释来说明代码的某些行为或原因就更好了。代码函数反转仍然不符合顺序。代码函数反转:插入或插入{forvar i=arr.length-1;i>0;i-var val=arr[i];var j;forj=i+1;j>0&&arr[j-1]val上的符号,它就像一个符咒:D1我从最后2个元素开始,只是为了更清楚地演示插入排序背后的逻辑。即使我们使用arr.length-1,它的工作原理也应该是一样的。我很高兴我把它留给你去解决。