1. 冒泡排序
//原理:比较两个相邻数之间的大小
function bubbleSort(arr){
let len= arr.length;
for(var j = 0; j < len-1; j++){
for(var i = 0; i < len-1-j; i++){
if(arr[i] > arr[i+1]){
var tmp = arr[i]; //tmp等于当前位置
arr[i] = arr[i+1]; //将找到的最小值的位置赋值给当前位置
arr[i+1] = tmp; //再将当前位置的值放到最小值的位置上完成交换
}
}
}
console.log(arr);
}
bubbleSort([3,1,4,5,2]);
2. 选择排序
//原理:从数组中找出最小值或最大值放到数组第一位,再从剩余的数中寻找最小最大值放到第二位,依次排序。
function selectSort(arr){
var len = arr.length; //让len等于数组的长度
var minNum , temp;
for(var i = 0;i<len-1;i++){
var minNum = i;
for(var j = i+1; j<len; j++){
if(arr[j] <arr[minNum]){
minNum = j; //获取最小值的地址
}
}
temp = arr[i]; //让temp等于第i个数的地址
arr[i] = arr[minNum]; //将最小值与第i个数替换
arr[minNum] = temp; //再将第i个数换到原来最小值的位置上
}
console.log(arr); //输出数组
}
var arr = [12,35,9,22,30];
selectSort(arr);
3. 快速排序
//原理:以一个数为基准,将其他数与它进行比较,比它小的放左边,大的放右边
function quickSort(arr){
if(arr.length<2){ //如果数组长度小于2直接输出
return arr;
}
var middle = arr[arr.length-1]; //以最后一个数为基准
var left = arr.filter((v,i)=> v <= middle &&i!==arr.length -1); //创建一个新数组存放比基准小的数
var right = arr.filter((v)=> v > middle); //创建一个新数组存放比基准大的数
return [...quickSort(left), middle ,...quickSort(right)]; //返回数组,并将其排序;...是扩展运算符,这里是数组合并
}
console.log(quickSort([3,4,1,5,2]));