选择排序
原理:(以降序为例)遍历乱序的数组,取出数组中最大的值,插入到一个新的数组中,直到原数组的没有值为止
原理图
JS 代码
var Arr = [5,7,1,8,10,4,3,2]; // 需要排序的数组
var newArr = []; // 已经排好序的数组
function f(arr){
if(arr.length === 0) return newArr;
let Max = Math.max(...arr);
newArr.push(Max);
for(var i = 0;i<arr.length;i++){
if(arr[i] === Max){
arr.splice(i,1)
}
};
f(arr);
};
f(Arr);
console.log(newArr); // [10, 8, 7, 5, 4, 3, 2, 1]
快速排序
原理:(以降序为例)选取乱序数组中中间的值,遍历数组,将数组中每一个值与选取的中间值比较,比选取的值大则放到左边数组,比选取的值小则放到右边数组。用同样的比较方式对左边和右边数组进行排序
原理图
JS 代码
var Arr = [8,5,3,6,1,2,10];
function f(arr){
if(arr.length === 0) return arr;
let Index = Math.floor(arr.length/2); // 获取数组中间的值的index;
let middleV = arr.splice(Index,1)[0]; // 获取数组中间的值并从arr中取出;
var left = [],right = [];
for(var i = 0; i < arr.length; i++){
if(arr[i]>middleV) left.push(arr[i]);
else right.push(arr[i]);
};
return f(left).concat([middleV],f(right));//把左边和右边的数组用同样的方式排序
};
f(Arr)