2015-08-31 77 views
-6

我正在參加一個算法類可汗學院的JavaScript。我寫了這樣的代碼:可汗學院 - 挑戰:實現插入排序

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

var insertionSort = function(array) { 
for (var st = 1; st < array.length; st++) { 
    insert(array, st, array[st]); 
} 
}; 

var array = [22, 11, 99, 88, 9, 7, 42]; 
insertionSort(array); 
println("Array after sorting: " + array); 
Program.assertEqual(array, [7, 9, 11, 22, 42, 88, 99]); 

現在我想知道這裏有什麼問題,我不能進入下一級...請幫助。 :)

+1

你必須解釋一下。似乎有點寬泛的你的問題。 – rottenoats

+0

嘿,我寫了這個代碼給汗學院挑戰實現插入排序。這看起來有些不對勁。爲什麼可汗學院不會將此代碼用於正確的? – user124942

+0

我不能去下一個級別。但對我來說,我認爲我的代碼沒有任何缺失。 – user124942

回答

0

您的程序是正確的,但可能是語法錯誤: 使用Console.log(「Array after sorting:」+ array); 而不是: println(「排序後的數組:」+數組); in java腳本沒有任何方法println輸出。

+0

是的,但是看[鏈接](https://www.khanacademy.org/computing/computer-science/algorithms)這裏[/ link] – user124942

+0

這總是在KA使用println ... – user124942

1
var insertionSort = function (unsortedList) { 
    var len = unsortedList.length; 

    for(var i = 0; i < len; i++) { 
    var tmp = unsortedList[i]; //Copy of the current element. 
    /*Check through the sorted part and compare with the 
    number in tmp. If large, shift the number*/ 
    for(var j = i - 1; j >= 0 && (unsortedList[j] > tmp); j--) { 
     //Shift the number 
     unsortedList[j+1] = unsortedList[j]; 
    } 
    //Insert the copied number at the correct position 
    //in sorted part. 
    unsortedList[j+1] = tmp; 
    } 
}; 
var array = [22, 11, 99, 88, 9, 7, 42]; 
insertionSort(array); 
println("Array after sorting: " + array); 
+0

請嘗試此代碼 –

+0

什麼也沒有發生...仍KA不讓我接下來... – user124942

7

to all :)這是正確的解決方案。您無法更改已經寫入的內容。

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; 
}; 
var insertionSort = function(array) { 
for (var st = 1; st < array.length; st++) { 
    insert(array, st - 1, array[st]); 
} 
}; 
var array = [22, 11, 99, 88, 9, 7, 42]; 
insertionSort(array); 
println("Array after sorting: " + array); 
Program.assertEqual(array, [7, 9, 11, 22, 42, 88, 99]); 
-2

這個工程...

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

它可能工作,但要使它成爲一個有用的答案,您需要解釋爲什麼,理想情況下OP的做事方式有什麼問題。 – Benjamin