[英]Insertion sort doesn't work in JavaScript
我不知道為什么我的腳本不起作用,它返回的長度與我輸入的長度相同,但是算法似乎不起作用。
var n = prompt("Entrer la taille de votre tableau:"); a = new Array(); b = new Array(); a.length = n; b.length = n; var i = 0, j = 0; for (i = 0; i < n; i++) { a[i] = prompt("Entrer les valeurs de votre tableau:"); }; console.log(a); // Algorithm part : for (i = 0; i < n; i++) { b[j] = a[i]; for (j = i; j > 0 && a[j - 1] > b[i]; j--) { a[j] = a[j - 1]; } a[j] = b[i]; } console.log(b); console.log(b.length);
我不確定您如何設想該代碼如何工作。 您在應該使用j
地方使用i
,並且以對我來說沒有意義的方式在數組a
和b
之間來回分配值。
使這項工作的方式是將內唯一的工作b
陣列,只是從值復制a
一次一個。 在內部循環中,應將j
初始化為i
的值,但此后不應該在該循環中使用i
。
另一個問題是您沒有將輸入轉換為數字,因此所有比較都作為字符串比較進行。
以下應該工作:
var n = prompt("Entrer la taille de votre tableau:"); a = new Array(); b = new Array(); a.length = n; b.length = n; var i = 0; var j = 0; var temp; for (i = 0; i < n; i++) { a[i] = Number(prompt("Entrer les valeurs de votre tableau:")); }; console.log(a); // Algorithm part : for (i = 0; i < n; i++) { // Place the ith value of a in b b[i] = a[i]; // Move backwards from i, swapping values until the inserted value is in the correct place for (j = i; j > 0 && b[j - 1] > b[j]; j--) { // swap temp = b[j]; b[j] = b[j - 1]; b[j - 1] = temp; } } console.log(b); console.log(b.length);
j在循環開始時未定義,因此行'b [j] = a [i]'並沒有達到您的期望。 您還在a
不按b
排序。 我認為這不是您想要的,因此以下代碼在b中排序。
//define some values
const a=[3,6,8,4,5,2,7,1];
const n=a.length;
const b=new Array(n);
//now do the insertion sort
for (let i = 0; i < n; i++) {
let j;
for (j = i; j > 0 && b[j - 1] > a[i]; j--) {
b[j] = b[j - 1];
}
b[j] = a[i];
}
console.log(b);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.