前提
let arr = [1,7,9,10,0];
let personArr = [
{
ename: 'huge',
age: 10
},
{
ename: 'zhang',
age: 12
},
{
ename: 'li',
age: 9
}
];
let len = arr.length;
1、冒泡
for (let i = 0; i < len; i++) {
for (let j = 0; j < len - i; j++) {
if (arr[j] > arr[j+1]) {
[arr[j+1], arr[j]] = [arr[j], arr[j+1]];
}
}
}
使用ES6结构交换变量
2、sort
1.1、对待数字的正序倒序排列
arr.sort((a,b) => {
return a-b; // 正序排列 b-a倒序排列
});
直接可以更改到arr数组,不仅如此,sort也有更强大的作用
2.2、实现按照年龄属性正序倒序排列
personArr.sort((a,b) => {
return b.age - a.age; // a.age-b.age到序
});
2.3、首字母正序倒序排列
personArr.sort((a,b) => {
let letter1 = a.name[0];
let letter2 = b.name[0];
return letter1.charCodeAt() - letter2.charCodeAt(); // 正序,反之倒序
});
2.4、扩展-随机排序
arr.sort(() => {
return 0.5-Math.random();
});
sort的原理也是冒泡排序,条件是return后面的值,为正:正序,为负:倒序,也可以为0:不排序;也可以设置有条件的排序,比如,id一致的时候按照年龄排序。
3、快排
function quickSort (arr) {
if (arr.length < 2) {
return arr;
}
let left = [], right = [];
let centerIndex = Math.floor( arr.length / 2 );
let centerVal = arr.splice( centerIndex, 1 );
for (let i = 0; i < arr.length; i++) {
if (arr[i] < centerVal) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
return quickSort(left).concat(centerVal, quickSort(right));
}
4、选择排序
function selectSort (arr) {
let minIndex;
for(let i = 0; i < arr.length - 1; i++) {
minIndex = i;
for (let j = i+1; j < arr.length; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// 交换 i 与 minIndex的值
[arr[minIndex], arr[i]] = [arr[i], arr[minIndex]];
}
return arr;
}
网友评论