SOURCE

let arr=[7,3,2,1,4,2,6,9,6,7]
function swap(arr,i,j){
  let temp=arr[i];
  arr[i]=arr[j];
  arr[j]=temp;
}
//冒泡排序
//冒泡排序的思想是第一次比较将最大的放在最后,第二次比较只需要比较length-1次,往后每次都是比较次数比上一次少一次。所以第一个循环只是来规定第二个循环的比较次数。
// function demo(arr){
//   for(let i=arr.length-1;i>=0;i--){
//     for(let j=0;j<i;j++){
//       if(arr[j]>arr[j+1]){
//         swap(arr,j,j+1)
//       }
//     }
//   }
//   return arr
// }

//插入排序
//插入排序的原理是从第二个元素开始循环,将其拿出来和它前面的一个元素组成的数组一个一个的进行比较,遇到大的放后面,遇到小的放前面。第二个循环是从后往前比较,故j--。
// function demo(){
//    for(let i=1;i<arr.length;i++){
//      for(let j=i-1;j>=0;j--){
//        if(arr[j]>arr[j+1]){
//          swap(arr,j,j+1)
//        }
//      }
//    }
//   return arr
// }

//选择排序
//选择排序的思想是让他和自身比较,设置一个minIndex来获取最小的数值的下标。第一层的第一次循环可以选出最小的元素,第二次循环可以选出第二小的元素,故第二层循环从i+1开始,意为前面已经是小元素了,再比的话又会重新交换,所以避开。
// function demo(arr){
//   for(let i=0;i<arr.length;i++){
//     let minIndex=i;
//     for(let j=i+1;j<arr.length;j++){
//       minIndex=arr[j]<arr[minIndex]?j:minIndex;
//     }
//     swap(arr,i,minIndex)
//   }
//   return arr
// }

//快排
//快排的思想是拿出当前数组的中间值,让剩余值与该值比较,小的放到左空数组里,大的放到右空数组里让后把左右数组合并,依次递归。当当前数组长度小于等于1时返回数组。
// function demo(arr){
//  if(arr.length<=1){return arr}
//   let mid=Math.floor(arr.length/2);
//   let index=arr.splice(mid,1)[0];
//   let left=[];
//   let right=[];
//   for(let i=0;i<arr.length;i++){
//     if(arr[i]<index){
//       left.push(arr[i])
//     }
//     else{
//       right.push(arr[i])
//     }
//   }
//  return demo(left).concat(index,demo(right));
// }

//冒泡排序的优化:有的时候排序早已经拍好了,但还是要往下进行。可以设置一个flag,当一次大循环里没有进行swap操作时证明已经排好序了。此时使用flag来进行判断,如果flag的值没有发生变化,证明已经排好序了,就跳出循环。
function demo(arr){
  let x=0
  let border=arr.length-1;
  for(let i=arr.length-1;i>=0;i--){
    let flag=true;//初始值设置为true
    for(let j=0;j<border;j++){
      if(arr[j]>arr[j+1]){
        swap(arr,j,j+1)
        x=j
        flag=false;
      }
    }
    if(flag){//当大循环里未调用swap时,表明已经排好序,使用break直接跳出循环即可。
      border=x
      break;
    }
  }
  return arr
}

console.log(demo(arr))
console 命令行工具 X clear

                    
>
console