冒泡排序
1、比较相邻的两个元素,如果前一个比后一个大,则交换位置。
2、比较完第一轮的时候,最后一个元素是最大的元素。
3、这时候最后一个元素是最大的,所以最后一个元素就不需要参与比较大小。
function bSort(arr) {
var len = arr.length;
for (var i = 0; i < len - 1; i++) {
for (var j = 0; j < len - 1 - i; j++) {
// 相邻元素两两对比,元素交换,大的元素交换到后面
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
//举个数组
myArr = [20, 18, 27, 19, 35];
//使用函数
bSort(myArr);
选择排序
//选择排序
let arr = [145, 248, 31, 45, 9, 11, 145, 300];
function arrSort(arr) {
for (let i = 0; i < arr.length - 1; i++) {
//遍历数组
let min = arr[i]; //防止arr[i]发生变化
for (let j = i + 1; j < arr.length; j++) {
//双重遍历,查找最小的数进行交换,跟冒泡不一样的地方在于,选择排序,假如第4位更小,则是1,4位交换,不是3,4位交换
if (min > arr[j]) {
let temp = min;
min = arr[j];
arr[j] = temp;
}
}
arr[i] = min;
}
return arr;
}
console.log(arrSort(arr));
快速排序
//快速排序
let arr = [145, 248, 31, 45, 9, 11, 145, 300];
function arrSort(arr) {
if (arr.length <= 1) {
return arr;
}
var pivotIndex = Math.floor(arr.length / 2);
var pivot = arr.splice(pivotIndex, 1)[0]; //取出中间的数字,比如第一次就取出9
var left = [];
var right = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] < pivot) {
//第一次运算,如果小于9就进入左数组,大于就进入右数组
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
return arrSort(left).concat([pivot], arrSort(right)); //递归,再把左数组分成两半进行排序,右数组同理。
}
sort 排序
/**
* 对象数组排序
* @param {*} prop 参数名字
* @param {*} rev 默认升序 arr.sort((a,b)=>{b-a})
* @returns arr.sort(sortby('age')) //根据年纪进行排序
*/
function sortby(prop, rev = true) {
return function (a, b) {
let val1 = a[prop];
let val2 = b[prop];
return rev ? val1 - val2 : val2 - val1;
};
}
let list = [{num:'4'},{num:'1'},{num:'7'}]
let arr = list.sort(sortby('num'));