2014-11-19 8 views
5

Ich arbeite derzeit durch Khan Academy Algorithmus Kurs, der JS verwendet, um grundlegende Algorithmen zu unterrichten. Ich bin gerade dabei, eine Einfügesortierung zu implementieren, habe aber ein Problem gefunden.Implementieren Einfügen Funktion

Wir schreiben eine Funktion, die ein Array, einen Index zum Starten von und einen Wert annimmt, um eine Zahl in die richtige geordnete Position einzufügen. Ich habe diese Funktion hier geschrieben:

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

Dies funktioniert gut, und führt, wie es sollte, aber es nicht passieren KA's automatisierte Markiersystem. Sie geben Richtlinien für den Code und empfiehlt es als solches geschehen:

for(var ____ = _____; ____ >= ____; ____) { 
    array[____+1] = ____; 
} 
____; 

Wer weiß, wie ich meinen Code zu diesen Standards entsprechen wiederholen könnte?

+0

Ich würde sagen, dass es mehr Sinn, es auf dieser Website zu stellen macht. – wvdz

Antwort

1

Das Array muss nicht zurückgegeben werden, da es als Referenz übergeben wird. Verschiebe einfach jedes Element um 1 nach rechts. Die letzte Anweisung fügt nur den Wert an der richtigen Position ein.

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

Die Rückgabe des Arrays wäre jedoch eine gute Übung. – Bergi

+1

@Bergi Ich stimme zu, aber dann würde es nicht in seine Codevorlage passen. Ich denke nicht, dass solche Vorlagen in irgendeiner Weise nützlich sind, weil es immer bessere Lösungen geben wird, die nicht in solch eine Vorlage passen. Außerdem werden Studenten davon abgeraten, nach anderen Lösungen zu suchen. – derMrich

+1

Ich denke, dass 'Array [RightIndex] = Wert;' ist falsch. – Felix

3

Ich hatte eine ähnliche Lösung wie Sie und bestand ihren automatisierten Test nicht. Wenn Sie später betrachten „Challenge: Implementieren Insertionsort“ gehen sie tatsächlich vor und implementieren die Funktion für Sie:

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; 
}; 

Als beiseite, der Grund, warum Sie nicht brauchen, j vor der for-Schleife zu erklären (zu später verwendet werden), weil JavaScript keinen Blockbereich (TIL) aufweist: See here

0

Die meisten der hier geposteten Antworten sind korrekt. Aber es bringt uns nicht zum nächsten Schritt in der Khan Academy. Es könnte sein, dass Khan Academy einen bestimmten Variablennamen, Einrückungseinstellungen usw. erwartet. Ich bin mir nicht ganz sicher, warum es uns nicht zum nächsten Schritt bringt.

Dieser Code hat mir geholfen, zum nächsten Schritt gehen:

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; 
}; 

Bevor ich diesen Code entdeckt, I i als Variablennamen anstelle von j verwendet, aber es hat mich nicht zum nächsten Schritt zu erhalten. Aber das tut es.

0

Dies hat gearbeitet:

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

Das scheint ein schlecht formatierter Code zu sein? –

Verwandte Themen