1
一.冒泡排序

基本思想:比较相邻的元素,如果第一个比第二个大,就交换它们两个的位置。

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}]

哈哈
9 声望1 粉丝