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还是很陌生,因此有时在语法上会感到困惑。我目前只是返回原始数组,但是正在尝试进行选择排序,即向右/向左/向中间类型.....我现在无法真正知道发生了什么。我只是试图排序然后返回数组。
有人能指出我正确的方向吗?
谢谢.....
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)