Implementing Insert Function

前端 未结 5 1684
感情败类
感情败类 2020-12-11 17:40

I am currently working through Khan Academy\'s algorithm course, which uses JS to teach fundamental algorithms. I am currently in the process of implementing an insertion so

相关标签:
5条回答
  • 2020-12-11 18:18

    From the challenge:

    Although there are many ways to write this function, you should write it in a way that is consistent with the hint code.

    It's strictly checking for this:

    var ___;
    for(___ = ___; ___; ___) {
        array[___ + 1] = ___;
    } 
    

    So even though these two alternates are correct:

    while(array[rightIndex] > value && rightIndex >= 0) {
        array[rightIndex + 1] = array[rightIndex];
        rightIndex--;
    }
    array[rightIndex + 1] = value;
    

    And especially this almost identical one (switched the middle statement in the for loop):

    for(var i = rightIndex; array[i] > value && i >= 0; i--) {
        array[i + 1] = array[i];
    }
    
    array[i + 1] = value;
    

    This one is the answer:

    for(var i = rightIndex; i >= 0 && array[i] > value; i--) {
        array[i + 1] = array[i];
    }
    
    array[i + 1] = value;
    

    Ironically, it doesn't care about the useless first variable in the hint...

    var ___;
    
    0 讨论(0)
  • 2020-12-11 18:18

    Most of the answers posted here are correct. But It does not get us to next step in Khan Academy. It could be because Khan Academy expects a certain variable name, indent settings etc. I am not exactly sure why It does not get us to next step.

    This code helped me go to next step:

    var insert = function(array, rightIndex, value) {
        for(var j = rightIndex;
            j >= 0 && array[j] > value;
            j--) {
            array[j + 1] = array[j];
        }   
        array[j + 1] = value; 
    };
    

    Before I discovered this code, I used i as variable name instead of j, but it did not get me to next step. But this does.

    0 讨论(0)
  • 2020-12-11 18:19

    I had a similar solution as you and didn't pass their automated test. If you look later at "Challenge: Implement insertion sort" they actually go ahead and implement the function for you:

    var insert = function(array, rightIndex, value) {
        for(var j = rightIndex; j >= 0 && array[j] > value; j--) {
            array[j + 1] = array[j];
        }
        array[j + 1] = value; 
    };
    

    As an aside, the reason you don't need to declare j before the for loop (to be used later) is because JavaScript doesn't have block scope (TIL): See here

    0 讨论(0)
  • 2020-12-11 18:37

    This has worked:

    var insert = function(array, rightIndex, value) {

    var j = rightIndex;
    
    for(var j = rightIndex; j >= 0 && array[j] > value; j--) {
        array[j + 1] = array[j];
    }   
    array[j + 1] = value;
    
    0 讨论(0)
  • 2020-12-11 18:39

    No need to return the array, as it is passed by reference. Just shift every element by 1 to the right. The last statement just inserts the value at the correct position.

    var insert = function(array, rightIndex, value) {
        for (var i = rightIndex; array[i] >= value; i--) {
            array[i+1] = array[i];
        }
       array[rightIndex] = value;
    };
    
    0 讨论(0)
提交回复
热议问题