选择在JavaScript中排序

use*_*104 3 javascript arrays sorting

function newsort(arr, left, right){    

for(var i= left; i < right; ++i){
    var min = i;
    for (var j = i; j < right; ++j){
        if (arr[min] > arr[j]){
        min = j;
        }
    }

var temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;  

}
return arr;
Run Code Online (Sandbox Code Playgroud)

}

var arr = [3,5,66,78,23,44,11,32,58];
alert(newsort(arr, arr.length, 0));
Run Code Online (Sandbox Code Playgroud)

上面是我编写的函数的代码。我对JS还是很陌生,因此有时在语法上会感到困惑。我目前只是返回原始数组,但是正在尝试进行选择排序,即向右/向左/向中间类型.....我现在无法真正知道发生了什么。我只是试图排序然后返回数组。

有人能指出我正确的方向吗?

谢谢.....

小智 5

您的代码的问题是左右参数传递的方式错误。这是工作代码:alert(newsort(arr, 0 ,arr.length));


cac*_*der 5

var selectionSort = function(array){
  for(var i = 0; i < array.length; i++){
    //set min to the current iteration of i
    var min = i;
    for(var j = i+1; j < array.length; j++){
      if(array[j] < array[min]){
       min = j;
      }
    }
    var temp = array[i];
    array[i] = array[min];
    array[min] = temp;
  }
  return array;
};
var array = [3,2,10,1]
console.log('selectionSort should return [1,2,3,10]-->',selectionSort(array));
Run Code Online (Sandbox Code Playgroud)

如果您使用辅助交换函数,可能会更容易推理:

//HELPER FUNCTION
var swap = function(array, firstIndex, secondIndex){
    var temp = array[firstIndex];
    array[firstIndex]  = array[secondIndex];
    array[secondIndex] = temp;
};
var array = [2,1];
swap(array, 0, 1)
console.log('swap should return [1,2] -->', array);


var selectionSort = function(array){
  for(var i = 0; i < array.length; i++){
    //set min to the current iteration of i
    var min = i;
    for(var j = i+1; j < array.length; j++){
      if(array[j] < array[min]){
        min = j;
      }
    }
    swap(array, i, min);
  }
  return array;
};
var array = [3,2,10,1]
console.log('selectionSort should return [1,2,3,10]-->',selectionSort(array));
Run Code Online (Sandbox Code Playgroud)

选择排序的视觉效果:

[3,1,2]
 |-----> iterate over list. find that min = 1 so we swap current i (3) with min(1)

[1,3,2]
   |---> iterate over list. find that min = 2 so we swap current i (3) with min(2)

[1,2,3]
     |---> iterate over list. find that min = 3 so we swap current i (3) with min(3)
Run Code Online (Sandbox Code Playgroud)

  • 解构是 ES2015 中 JavaScript 的一项功能,可以在一行中处理交换:“[array[i], array[min]] = [array[min], array[i]];”。了解如何编写自己的交换函数仍然很好,但解构是您工具带中的一个很棒的新工具。[您可以在 MDN 上阅读有关解构的更多信息](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment)。 (3认同)