插入排序不适用于JavaScript

时间:2018-12-18 11:00:16

标签: 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);

2 个答案:

答案 0 :(得分:0)

我不太确定您如何看待该代码的工作方式。您在应该使用i的地方使用j,并以一种没有意义的方式在数组ab之间来回分配值。我。

实现此目的的方法是仅在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);

答案 1 :(得分:0)

在循环开始时未定义

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);
相关问题