javascript选择排序导致Chrome浏览器控制台挂起或崩溃为什么?

时间:2017-03-27 07:22:53

标签: javascript sorting console selection-sort

为什么控制台在我的浏览器中崩溃,如果我在浏览器控制台的变量中运行此函数,它会挂起或崩溃,我可以关闭选项卡,但控制台只是停止工作。

let arr=[70,30,24,90,4];

function selectionSort(list){
    let minIndex=0;
    let minVal=0;

    for(let i=0; list.length; i++){
        minIndex=i;
        minVal=list[i];

        for(let j=i; j<list.length; j++){
            if(list[i]< minVal){
                minVal=list[i];
                minIndex=j;

            }
        }
        if(minVal<list[i]){
            temp=list[i];
            list[i]=list[minIndex];
            list[minIndex]=temp;
        }
    }


    return list;
}

let ar= selectionSort(arr);// causes console in chrome to stop working

3 个答案:

答案 0 :(得分:1)

无限循环。

你需要

for(let i=0; i < list.length; i++){

否则list.length总是如此。

另外请记住,你正在重新发明轮子: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

答案 1 :(得分:1)

为什么在使用sort()方法时需要进行自定义排序:

let arr=[70,30,24,90,4, 400, 0, 24];
let sorted = arr.sort((a, b) => a > b );

console.log(sorted);

由于嵌套循环和您正在进行的检查,您的浏览器会挂起。

答案 2 :(得分:1)

您的代码有几个问题,它的工作方式如下

&#13;
&#13;
let arr = [70, 30, 24, 90, 4, 23];

function selectionSort(list) {
  let minIndex = 0;
  let minVal = 0;

  for (let i = 0; i < list.length; i++) { // add "i < " to prevent infinite loop
    minIndex = i;
    minVal = list[i];

    for (let j = i+1; j < list.length; j++) { // add "+1" (saves you a nano second)
      if (list[j] < minVal) { // change to j (otherwise the sorting won't work)
        minVal = list[j];
        minIndex = j;
      }
    }
    
    if (minVal < list[i]) {
      let temp = list[i];
      list[i] = list[minIndex];
      list[minIndex] = temp;
    }
    
  }

}

selectionSort(arr)
console.log(arr)
&#13;
&#13;
&#13;

请记住,JavaScript调用是通过引用调用数组。所以不要将列表分配给新变量。