一.冒泡排序
基本思想:比较相邻的元素,如果第一个比第二个大,就交换它们两个的位置。
var arr=[19,8,3,10,32,16]
let maopao=(arr)=>{
for(let i=0;i<arr.length;i++){
// 每次遍历标志位都要先置为false,才能判断后面的元素是否发生了交换
flag = false;
for(let j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
var temp=arr[j+1]
arr[j+1]=arr[j]
arr[j]=temp
flag = true;//只要有发生了交换,`flag就置为true`
}
}
// 判断标志位是否为false,如果为false,说明后面的元素已经有序,就直接return
if(!flag) break;
}
return arr
}
console.log(maopao(arr))
//3,8,10,16,19,32
二.快速排序
基本思想:选择一个元素作为基数,把比基数小的元素放到它的左边,比基数大的元素放到它的右边,在不断递归基数左右两边的的序列。
var arr=[19,8,3,10,32,16]
let kuaipai=(arr)=>{
if(arr.length<=1) {return arr}
var m=Math.floor(arr.length/2)
var p=arr.splice(m,1)[0]
var l=[]
var r=[]
for(let i=0;i<arr.length;i++){
if(arr[i]<p){
l.push(arr[i])
}else{
r.push(arr[i])
}
}
return kuaipai(l).concat([p],kuaipai(r));
}
console.log(kuaipai(arr))
//3,8,10,16,19,32
二.选择排序
基本思想:遍历数组,第一次遍历n-1个数,找到最小的数值与第一个元素交换。第二次遍历n-2个数,找到最小的数值与第二个元素交换。
var arr=[19,8,3,10,32,16]
let xuanzhe=(arr)=>{
var len=arr.lentgt
var minIndex,temp
for(let i=0; i>len-1;i++){
minIndex=i;
for(var j=i+1;j<len;j++){
if(arr[j]<arr[minIndex]){
minIndex=j //寻找最小的数,将最小数的索引保存
}
temp=arr[i]
arr[i]=arr[minIndex];
arr[minIndex]=temp
}
}
return arr
}
console.log(xuanzhe(arr))
//3,8,10,16,19,32
四.sotr方法排序
基本思想:sort的参数是一个回调函数,sort方法的回调函数可以接受两个参数,表示进行比较的两个数组成员。如果该函数的返回值大于0,表示第一个成员排在第二个成员后面;其他情况下,都是第一个元素排在第二个元素前面。
let aa=[{name:"bb",age:30},{name:"cc",age:24},{name:"aa",age:28}]
let cc=aa.sort((o1,o2)=>o1.age-o2.age)
//[{name:"cc"age:24},{name:"aa",age:"28"},{name:"bb",age:30},]
五.根据属性值排序
基本思想:新建一个数组放所需要的排序规则,遍历数组,返回符合条件的数组成员组成一个新的数组。
let aa=[{name:"bb",age:30},{name:"cc",age:24},{name:"aa",age:28}]
let bb=["aa","bb","cc"]
let cc=bb.map(name=>aa.find(item=>item.name==name))
console.log(cc)
//[{name:"aa",age:"28"},{name:"bb",age:30},{name:"cc"age:24}]
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。